解決済みの質問
エクセルのマクロでこんな処理はできるでしょうか?
元データ表に
A列からC列まである数値が5000行にわたって入っています。
例
A B C
1行目 1 4 6
2行目 4 7 8
3行目 5 6 4
4行目 7 8 2
・
・
今、1行目と2行目の間に新たな行を挿入し、
C1セルの値を新たに挿入した行のA列からC列に貼り付けたい。
同様に現時点での2行目と3行目の間に新たな行を挿入し
今度はC2セルの値をその行に貼り付けます。
上の例で言うとこうなります。これを最後の行まで繰り返します。
A B C
1行目 1 4 6
2行目 6 6 6
3行目 4 7 8
4行目 8 8 8
5行目 5 6 4
6行目 4 4 4
7行目 7 8 2
8行目 2 2 2
・
・
元データは5000行あるので、都合1万行になるということです。
このような処理はできるでしょうか?
お教えいただけたら幸いです。よろしくお願いします。
投稿日時 - 2010-03-18 08:02:50
Sub Macro1()
a = 2
For n = 1 To 5000
Rows(a).Insert Shift:=xlDown
Cells(a, 1).Value = Cells(a - 1, 3)
Cells(a, 2).Value = Cells(a - 1, 3)
Cells(a, 3).Value = Cells(a - 1, 3)
a = a + 2
Next
End Sub
でできるでしょう。
投稿日時 - 2010-03-18 08:59:50
お礼
できました!!
ありがとうございました。
投稿日時 - 2010-03-18 09:20:22
3人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(3件中 1~3件目)
E1:G10000に出力します。
Sub test()
Dim v As Variant
Dim myArr As Variant
Dim i As Long, j As Long
v = Range("A1:C5000").Value
ReDim myArr(1 To UBound(v, 1) * 2, 1 To 3)
For i = 1 To UBound(v, 1)
For j = 1 To 3
myArr(i * 2 - 1, j) = v(i, j)
myArr(i * 2, j) = v(i, 3)
Next
Next
Range("E1").Resize(UBound(myArr, 1), 3) = myArr
End Sub
A1から出力するのなら
>Range("E1").Resize(UBound(myArr, 1), 3) = myArr
Range("A1").Resize(UBound(myArr, 1), 3) = myArr
に直してください。
投稿日時 - 2010-03-18 09:17:34