
動画でExcel データ1件が4行で1列にずらずら続く縦もちデータ
動画版「マクロ講座入門EX」08回の解説です。
このようなデータに遭遇したことはないでしょうか?一番上がコードで、
2行目が名前で、3行目がデータで、4行目は電話番号という
4行が1件分のデータなどです。

その縦長データを使いやすい形に整形したデータがこちらになります。

そこで最初の案として、データの移動を考えました。2行目のデータを隣の列のデータにするということです。

上記コードを実行した結果次のようになりました。不要になったデータは削除すればいいのです。
方法はマクロでも、手動でも、どちらにせよデータの件数分の削除が必要です。

なぜデータの行を1行分下げたのかというと、1行目に見出しを入れようと考えたからです。こちらには、空白行を削除するコードも書き加えました。

実行しました。最終的に欲しかったのはこの形のデータです。

ではコードの説明に移ります。今回は、説明がしやすくなるように、変数i, jを日本語の行と列に変更することにします。

始めのコードでは、最初の行のデータA2は、同じ行の同じ列に移動、次の行のデータは、上の行の一つ隣の列に移動します。

図にすると、なんだか無駄なことをしているように思えます。A2のデータをもとのA2の位置に移動するという動作です。

これではあとの行削除が面倒だと考えて、このようなコードに変更しました。
データはB列からE列に移動する方が綺麗です。

実行後のデータはこのようになります。結果は変わりませんが。

全体のコードです。ポイントは移動は横への列移動だけでなく、上への行移動と横への列移動を組み合わせたということです。
このようなことが簡単にできるのは、Cells(行,列)という書きかたがあるからです。
Option Explicit
Dim 行 As Long, 列 As Long, lastRow As Long
Sub データ成型4行から1行に()
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For 行 = 2 To lastRow Step 4
For 列 = 0 To 3
Cells(行, 列 + 2) = Cells(行 + 列, 1)
Next 列
Next 行
' A列のデータを削除
Columns("A:A").Select
Selection.Delete Shift:=xlToLeft
' 空白行を削除
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For 行 = lastRow To 2 Step -1
If WorksheetFunction.CountA(Rows(行)) = 0 Then
Rows(行).Delete
End If
Next 行
End Sub
