「ブロック機能」のリニューアルについて

くわしい方、よろしくお願いいたします。

<したいこと>
表1のようなデータがあるとします。これをD列の数字に応じて、表2のようにコピー行をその数字の数だけ作りたいのです。もちろん、手作業で「コピー→行挿入」を繰り返せばできますが、いかんせん実際はデータ量が多いため大変です。これを簡単に行う方法はないでしょうか。

表1
   A列   B列   C列  D列
1 ポテト  120円  12/2 3
2 チョコ  150円  3/5  5
3 クッキー 200円   5/3 2 


表2
   A列   B列   C列  D列
1 ポテト  120円  12/2 3
2 ポテト  120円  12/2 3
3 ポテト  120円  12/2 3
4 チョコ  150円  3/5  5
5 チョコ  150円  3/5  5
6 チョコ  150円  3/5  5
7 チョコ  150円  3/5  5
8 チョコ  150円  3/5  5
9 クッキー 200円   5/3 2
10 クッキー 200円   5/3 2

シートは別に作成されると、なおよいです。

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

  • 回答ありがとうございます。さっそく試してみたいと思います。

    ただ、時間がかかりそうです。
    もし、よろしければ、エクセルを開いたところからの手順を全く1から指示して頂けないでしょうか。
    ご検討よろしくお願いいたします。

      補足日時:2015/04/15 20:06
教えて!goo グレード

A 回答 (2件)

こんばんは!


一例です。
Sheet1のデータをSheet2に表示するとします。
尚、1行目は項目行で、データは2行目以降にあるとします。

標準モジュールです。

Sub Sample1()
Dim i As Long, wS As Worksheet
Set wS = Worksheets("Sheet1")
With Worksheets("Sheet2")
.Cells.ClearContents
wS.Range("A1").Resize(, 4).Copy .Range("A1")
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
With .Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(wS.Cells(i, "D"))
.Value = wS.Cells(i, "A")
.Offset(, 1) = wS.Cells(i, "B")
.Offset(, 2) = wS.Cells(i, "C")
.Offset(, 3) = wS.Cells(i, "D")
End With
Next i
End With
End Sub

※ Sheet2のC列表示形式は日付にしておいてください。m(_ _)m
    • good
    • 3
この回答へのお礼

ありがとうございました。
1さんとはまた違うコードで、こちらはシート2に転写される形式。
こちらも要求通りのことが瞬間でできました。
本当に助かりました。

お礼日時:2015/04/15 20:29

VBAの力が必要になりますが、大丈夫でしょうか



表1が シート名 Sheet1だとして
Sub ボタン1_Click()
For i = 2 To Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
For j = 1 To Sheets("Sheet1").Range("D" & i).Value
GYOU = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & GYOU & ":C" & GYOU).Value = Sheets("Sheet1").Range("A" & i & ":C" & i).Value
Next
Next
End Sub
別シートで実行してみてください。
    • good
    • 3
この回答へのお礼

ありがとうございます。
時間のかかった作業が、一瞬でできました。
助かりました。本当にありがとうございます。

お礼日時:2015/04/15 20:27

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング