- ベストアンサー
Excelで複数行を1行にするマクロについて
Excel2000で3行を繰り返し、1つの行にまとめていくマクロの書き方についてご教授ください。 例えば下記のような並びの時、 A B C D E F G H I ..... マクロを使って、 A B C D E F G H I ...... のようにしたいと考えています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんなカンジで。 Sub macro2() Dim i, j For i = 1 To Range("A65536").End(xlUp).Row Step 3 For j = 1 To 2 Cells(i, "A").Offset(j, 0).Cut Destination:=Cells(i, "A").Offset(0, j) Next j Next i Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub
その他の回答 (2)
- mt2008
- ベストアンサー率52% (885/1701)
自分なら、一回配列に読み込んで貼り付けなおします。 Sub Sample() Dim vData, nLast, i nLast = Range("A" & Rows.Count).End(xlUp).Row vData = Range(Cells(1, 1), Cells(nLast, 1)) Range(Cells(1, 1), Cells(nLast, 1)).Clear For i = 0 To (nLast - 1) Cells(Int(i / 3) + 1, i Mod 3 + 1) = vData(i + 1, 1) Next i End Sub
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
keithin さんには遠く及びませんが、挑戦してみた Sub Macro1() Dim 最終行 As Long 最終行 = Range("A" & Rows.Count).End(xlUp).Row If 最終行 < 4 Then Exit Sub Range("B:C").ClearContents Columns("D:D").Insert Shift:=xlToRight Range("B1:B" & Int((最終行 + 1) / 3)).FormulaR1C1 = "=INDEX(C1,ROW()*3-3+COLUMN())" Range("C1:C" & Int(最終行 / 3)).FormulaR1C1 = "=INDEX(C1,ROW()*3-3+COLUMN())" Range("D1:D" & Int((最終行 - 1) / 3)).FormulaR1C1 = "=INDEX(C1,ROW()*3-3+COLUMN())" Range("B1:D" & Int((最終行 + 1) / 3)).Value = Range("B1:D" & Int((最終行 + 1) / 3)).Value Range("A2:A" & Int((最終行 + 2) / 3)).Value = Range("D1:D" & Int((最終行 - 1) / 3)).Value Columns("D:D").Delete Shift:=xlToLeft Range("A" & Int((最終行 + 5) / 3), "A" & 最終行).ClearContents End Sub 長い。。。 けど、処理は速いかな