• ベストアンサー

Excelで複数行を1行にするマクロについて

Excel2000で3行を繰り返し、1つの行にまとめていくマクロの書き方についてご教授ください。 例えば下記のような並びの時、 A B C D E F G H I ..... マクロを使って、 A B C D E F G H I ...... のようにしたいと考えています。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

こんなカンジで。 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)
回答No.3

自分なら、一回配列に読み込んで貼り付けなおします。 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

回答No.2

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 長い。。。 けど、処理は速いかな

関連するQ&A