質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

6201閲覧

2行以上連続で追加行を増やしたい

haruto4649

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2016/12/07 04:04

編集2016/12/07 05:37

###実現したいこと

【要望】 データ管理をしているエクセルです。
社員データを追加したい場合、一番下の行に追加するのではなく、間に行を追加して入力していきたいのです。1行ずつ追加するのを可能になりました。
そこで、連続した2行を選択して2行新規で追加したい場合は、どうしたらよいでしょうか???

おわかりになる方いらっしゃいますでしょうか?

VBAは初心者です。

##流れ

╋━━━━━╋ ┃行の削除 ┃→ボタン ╋━━━━━╋ 列lFl K l L l M l N l Q ---------------------------------------------------- 7lNo 表示順 社員番号 名前 電話番号 部屋番号 8l1 1 1212 花田 ○○子 99-9999-9999 S 9l2 2 7833 花田 ××子 99-9999-10000 A 10l3 3 6137 花田 ○○男 99-9999-10001 B 11l4 4 5773 花田 ××男 99-9999-10002 C 12l5 1 5187 花田上 ○○子 99-9999-10003 D 13l6 2 3587 花田上 ××子 99-9999-10004 E 14l7 3 1799 花田上 ○○男 99-9999-10005 F 15l8 4 7387 花田上 ××男 99-9999-10006 G

☆名前の欄や電話番号は、VLOOKUPで自動的に表示しています。

###該当のソースコード
'指定の行番号を調べる
For Each rng In Selection.Rows
Row(cnt) = rng.Row
cnt = cnt + 1
Next rng

'行を追加する For cnt = 99 To 0 Step -1 If Row(cnt) <> "" Then Rows(Row(cnt)).Copy Rows(Row(cnt)).Insert Shift:=xlDown .Range("K" & Row(cnt) & ":" & "L" & Row(cnt)) = "" .Range("O" & Row(cnt) & ":" & "X" & Row(cnt)) = "" .Range("L" & Row(cnt)).Select End If Next cnt 'NOを振り直す Row_ALL = 1 For i = 8 To Cells(Rows.Count, "H").End(xlUp).Row If .Range("H" & i).Value = "" Then Exit For End If If 配送エリア退避 <> .Range("H" & i).Value Then 配送エリア退避 = .Range("H" & i).Value Row_CNT = 0 End If .Range("F" & i).Value = Row_ALL .Range("K" & i).Value = Row_CNT Row_ALL = Row_ALL + 1 Row_CNT = Row_CNT + 1 Next

どうぞよろしくお願いいたします。

##補足

わかりにくくてすみません。。
行を追加するのは、できるのですが、
選択している行がどこかROWを取得するのが、できないのです。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

例えば下記コードで 2 行追加できます。

VBA

1Range("A1").Resize(2).EntireRow.Insert

2 行選択する状態を再現させるために Resize() 関数を使っています。

投稿2016/12/07 05:44

twyujiro15

総合スコア217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haruto4649

2016/12/07 07:13

早速、お答えいただきありがとうございます。 ちなみに・・・ Resize関数で2行以上や複数(シフトキー)選択した場合は、どのようになるのでしょう??? なんどもすみません。。
guest

0

ベストアンサー

選択されている行に空行を挿入したい、という質問であると認識して、下記回答致します。

VBA

1Selection.Row.Insert

質問の意図を読み違えていたら、スルーして下さい。
よろしくお願いします。


追記確認致しました。

選択されている行数は以下で取得出来ます。
※イミディエイトウィンドウに表示されます。

VBA

1Dim r As Variant 2For Each r In Selection.Rows 3 Debug.Print r.Row 4Next r

また、例えば、選択されている行のC列に5を入れる場合は、

VBA

1Dim r As Variant 2For Each r In Selection.Rows 3 r.Cells(3).value = 5 4Next r

のようになります。


さらに追記確認しました。

上記と組み合わせてお使い頂ければある程度は対応できると思います。

VBA

1' 選択範囲のコピー 2Selection.Copy 3' 選択範囲行数分の挿入 4Selection.Insert 5' 選択範囲の貼り付け 6Selection.PasteSpecial

さらに、さらに追記確認しました。

BAが付いた後ですが、下記で出来ます。

VBA

1' 関数名は適当です。 2Sub test3() 3 ' 選択されている行数を格納 4 Dim col As New Collection 5 Dim v As Variant 6 For Each v In Selection.Rows 7 col.add v.Row 8 Next v 9 ' 行数を昇順にソート 10 Set col = getAscSort(col) 11 Dim r As Variant 12 Dim add As Long 13 ' 選択されている行数はcolの中に入っているので 14 ' ループで回しつつ上から順番に1行ずつコピーして貼り付けを繰り返す(※) 15 For Each r In col 16 r = r + add 17 Rows(r).Copy 18 Rows(r).Insert 19 Rows(r).PasteSpecial 20 add = add + 1 21 Next r 22End Sub 23 24' ソート用関数 戻り値はCollection型 25Function getAscSort(ByVal col As Collection) As Collection 26 Dim result As New Collection 27 Dim id As Long, i As Long 28 Do Until (col.Count = 0) 29 id = 1 30 For i = 2 To col.Count 31 If col(id) > (col(i)) Then 32 id = i 33 End If 34 Next i 35 result.add col(id) 36 col.Remove id 37 Loop 38 Set getAscSort= result 39End Function

投稿2016/12/07 04:53

編集2016/12/08 06:57
Batoh33789

総合スコア136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haruto4649

2016/12/07 05:41

Batoh33789さん。 早速、回答いただきありがとうございます! 行を挿入することはできるのですが、 ボタンを押す際に、どの行を選択しているかがわからないのです。。。
Batoh33789

2016/12/07 05:55

こういうことでしょうか?
haruto4649

2016/12/07 07:15

Batoh33789さま。 はい!できました!選択行を取得することができました! ただ、、、その選択した行に、行を追加したい場合、 今選択した行をコピーして、コピーした内容を挿入という形にしたいのです。 Rows(r).Copy では、コピーできませんでした。。。
Batoh33789

2016/12/07 08:12

1.行を選択してコピー 2.行を挿入 3.1でコピーした内容を挿入したところに貼り付け を実施したら上記の通りになりましたが、これであってますか?
haruto4649

2016/12/07 14:39

Batoh33789さん! 出来ました~!! すごいです!! もう1点だけお尋ねしてもよろしいでしょうか? 1行や連続する2行の追加はできました。 ただ、シフトキーで、とびとびで選択した行で追加したい場合がうまくいかなかったのです。。。 何度もすみません。。。 お時間あるときでけっこうです。 よろしければ、教えてください。
Batoh33789

2016/12/08 06:55

更新しました。上記ので恐らく動作するかと思います。 また※印部分の補足ですが、仮に選択されている行数が2,4,6行目だった場合 下記のような手順で行う必要があります。 1.2行目をコピー 2.2行目に空行を挿入 3.2行目に貼り付け 4.(元々は4行目だったが、2行目に1行増やしたので)5行目をコピー 5.5行目に空行を挿入 6.5行目に貼り付け 7.(元々は6行目だったが、2,5行目に1行増やしたので)8行目をコピー ・・・ といった形で進める必要があり、結果として上記のような形にしました。 かなりゴリ押しなので、他にも方法があるかもしれません。
haruto4649

2016/12/08 08:38

Batoh33789さん。。。 本当に何度も何度もありがとうございました。 再度、チャレンジしてみます! 勉強されて、すごいです! 参考にさせていただきます!! また、どうぞよろしくお願いいたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問