• ベストアンサー

Excel で行を指定回数だけコピーしたい

Excel で行を指定回数だけ、コピーしたいと思います。 A    B   C   D    E ssjj kkkk ssss jajj 2 jkjk jjkj jahj kjkj 4 ksks ssss kakk uhuh 0 kaka sakk kjkj iuiiu 1 このような表があった時、E列で繰り返しの回数を指定するとして 次のシートに以下のような表ができれば いいのですが。 A     B     C     D     E ssjj kkkk ssss jajj 2 ssjj kkkk ssss jajj 2 jkjk jjkj jahj kjkj 4 jkjk jjkj jahj kjkj 4 jkjk jjkj jahj kjkj 4 jkjk jjkj jahj kjkj 4 jkjk jjkj jahj kjkj 4 kaka sakk kjkj iuiiu 1 膨大な数のデータですのでVBAやマクロ が使えるといいのですが。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>VBAやマクロが使えるといいのですが。 VBAでやれば簡単なロジックで出来るが、VBAの経験はあるのかな。 (A)E列に繰り返し数があると仮定している。 (B)2003までなら、データ数は65536行以内と仮定になる。 (E列の繰り返し数の合計が) 標準モジュールに Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("sheet1") Set sh2 = Worksheets("sheet2") d = sh1.Range("A65536").End(xlUp).Row MsgBox d k = 1 For i = 1 To d For j = 1 To sh1.Cells(i, "E") sh1.Range(sh1.Cells(i, "A"), sh1.Cells(i, "E")).Copy _ sh2.Cells(k, "A") k = k + 1 Next j Next i End Sub ーー 質問例でのテスト  Sheet2に ssjj  kkkk   ssss    jajj    2 ssjj  kkkk   ssss    jajj    2 jkjk  jjkj   jahj    kjkj   4 jkjk  jjkj   jahj    kjkj   4 jkjk  jjkj   jahj    kjkj   4 jkjk  jjkj   jahj    kjkj   4 kaka  sakk   kjkj    iuiiu   1

kansha40-1
質問者

お礼

お世話になります。 さきほど、御礼メールを出したつもりなのですが、ポップアップブロッカーの影響なのか、発信していなかったようなので、もう一度、御礼させていただきます。 重複していましたら、お許しください。 教えていただいた方法で無事に問題を解決し、作業を終了することができました。 ほんとうに、ありがとうございました。 VBAはおっしゃられましたように、確かに、経験もほとんどありません。 でも、最近、取り組んでいる仕事で、どうしてもこうした作業が必要になってきましたので、本と首っ引きで取り組んでいます。でも、どうしても、実作業の需要には追いつかないのが現状です。この問題だけで、昨日、半日以上を費やしてしまいました。ほんとうにありがとうございました。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

E列の最終入力行から順に上にコピーしてゆきます。 もとの行より行数が増加するので、シートから溢れる可能性がありますが、そのチェックはしていません。 アクティブなシートに対して処理が行われます。 Sub test() Dim st As Worksheet, rng As Range Dim r As Long, r1 As Long, cnt As Long Set st = ActiveSheet For r = st.Cells(st.Rows.Count, 5).End(xlUp).Row To 1 Step -1  If IsNumeric(st.Cells(r, 5).Value) Then    r1 = st.Cells(r, 5).Value    Set rng = st.Cells(r, 1).Resize(1, 5)    For cnt = 2 To r1     st.Cells(r + 1, 1).EntireRow.Insert     rng.Copy Destination:=rng.Offset(1, 0)    Next cnt  End If Next r End Sub

kansha40-1
質問者

お礼

ありがとうございました。 問題点として、E列が"0"のところが残ってしまいました (E列"0"のところは行を削除したかったのですが) が、E列 が "0" の行だけ削除するという方法で、無事に、作業を進めることができました。 ちょっと問題点はありましたが、勉強になるcode だと思いました。 これからもよろしくお願いいたします。

関連するQ&A