プロが教えるわが家の防犯対策術!

すみません。若輩者でどなたか教えてください。
エクセルvbaを使用して下記表がから I列 の数値を参照して、
数値分の行コピー追加したいです。

A B C D E F G H I
1 名前1 名前2 100 200 300 400 500 2
2 名前1 名前2 10 20 30 40 50 5
2 名前1 名前2 -80 -160 -240 -320 -400 8
4 名前1 名前2 -170 -340 -510 -680 -850 1
5 名前1 名前2 200 300 400 500 600 4
6 名前1 名前2 400 500 600 700 800 6

自分の力では、うまく出来なくお力添えをお願いします。
宜しくお願い致します。

質問者からの補足コメント

  • 説明が足らずすみません。
    A列はナンバリングしただけです。(癖で振ってしまいます。)
    行NOをつけてみました。

    行NO A列 B列 C列 D列 E列 F列 G列 H列 I列
    1 1 名前1 名前2 100 200 300 400 500 2
    2 2 名前1 名前2 10 20 30 40 50 5
    2 2 名前1 名前2 -80 -160 -240 -320 -400 8
    4 4 名前1 名前2 -170 -340 -510 -680 -850 1
    5 5 名前1 名前2 200 300 400 500 600 4
    6 6 名前1 名前2 400 500 600 700 800 6

    上記 I列 の値を参照し、その値分の行数を 直ぐ下へ追加ペーストしたいです。

    宜しくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/07/30 11:03

A 回答 (3件)

こんにちは!



一例です。
オーソドックスにやってみました。
尚、データは1行目からあるとします。

Sub Sample1()
 Dim i As Long, k As Long
  For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
   If Cells(i, "I") > 0 Then
    Rows(i + 1 & ":" & i + Cells(i, "I")).Insert
     For k = 1 To Cells(i, "I")
      Range(Cells(i, "A"), Cells(i, "I")).Copy Cells(i + k, "A")
     Next k
   End If
  Next i
End Sub

※ 上記マクロを実行すると、I列の数値より1行多くコピー&ペーストすることになるのですが、
これで良いのでしょうかね?
もしI列の行数分だけの行数にしたい場合は↓のコードにしてみてください。

Sub Sample2()
 Dim i As Long, k As Long
  For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
   If Cells(i, "I") > 1 Then '//★//
    Rows(i + 1 & ":" & i + Cells(i, "I") - 1).Insert
     For k = 1 To Cells(i, "I") - 1 '//★//
      Range(Cells(i, "A"), Cells(i, "I")).Copy Cells(i + k, "A")
     Next k
   End If
  Next i
End Sub

※ 「★」の行で行数合わせをしています。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さんありがとうございます。

後者のvbaをありがたく頂きました!!

ありがた序でにもう一つすみません。。。教えてください。
一行目は項目になり、3行目(エクセルで見た)が数値を置き換えても、エラーになりまして。。。

エラーコード13なんです。。。何か想定外な事をしてしまいましたでしょうか。

教示頂けますと幸いです。

お礼日時:2018/07/30 17:15

No.2です。



>一行目は項目になり、3行目(エクセルで見た)が数値を置き換えても、エラーになりまして。。。

1行目は項目行でデータは2行目以降にある!というコトですかね?
そしてエラーに関して、
I列に文字列は含まれていませんか?
I列が数値の場合は問題なく動くと思うのですが・・・

↓のコードにしてみてください。

Sub Sample3()
 Dim i As Long, k As Long
  For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1 '//A列最終行から2行目まで★//
   If Cells(i, "I") > 1 Then
    Rows(i + 1 & ":" & i + Cells(i, "I") - 1).Insert
     For k = 1 To Cells(i, "I") - 1
      Range(Cells(i, "A"), Cells(i, "I")).Copy Cells(i + k, "A")
     Next k
   End If
  Next i
End Sub

※ 一つ気になるのが
>3行目(エクセルで見た)が数値を置き換えても・・・
の部分で、3行目からデータがあるのだとすると、コード内の「★」の行の
「2」を「3」に変更してみてください。

A~I列すべてをコピー&ペーストしていますが、I列は必要ないように思えます。
その場合は
>Range(Cells(i, "A"), Cells(i, "I")).Copy Cells(i + k, "A")

>Range(Cells(i, "A"), Cells(i, "H")).Copy Cells(i + k, "A")
に変更してください。m(_ _)m
    • good
    • 1

Before・Afterがあると分かりやすかったかも。


あと一番左の数値は行番号?(そうするとI列がないしね)
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!