【エクセルマクロ】横データを縦データに並べる:3倍高速化する手法

エクセルマクロ 横データを縦データに変換アイキャッチ エクセルマクロで効率化する

エクセルマクロで、横データを縦データに並べるVBAコードをご紹介します。

このページのマクロコードは、コピペで使えます。

エクセルマクロ 横データを縦データに変換した後

横データを縦データに並べる

以下のマクロを実行すると、横データを縦データに並べます。

Sub 横データを縦データに変換()

Dim i As Long
Dim j As Long
Dim Q As Long
Dim Z As Long

Dim YokoLoop As Long
Dim TateLoop As Long

Dim InputData(100, 2) As String
           
    '横ループ回数
    YokoLoop = Range("A1").End(xlToRight).Column
   
    '縦ループ回数
    TateLoop = Cells(Rows.Count, 1).End(xlUp).Row
    
    Z = 0
    
    '横ループ
    For j = 1 To YokoLoop Step 3
    
        '縦ループ
        For i = 2 To TateLoop
            
            '3列分の値を配列に格納
            For Q = 0 To 2
                InputData(Z, Q) = Cells(i, Q + j)
            Next Q
            
            Z = Z + 1
            
        Next i
    Next j
    
    ' 配列を一気にセル範囲に転記
    Cells(2, 12).Resize(100, 3).Value = InputData

    '配列のクリア
    Erase InputData

 End Sub

 

横データの値の取得について

2次元配列を使って、横データの値をすべて取得します。

例えば、セルA2:C2の値の取得状況を、
ウォッチウィンドウで見てみると、以下のようになります。

・果物名 → [InputData(0, 0)]
・数量  → [InputData(0, 1)]
・単価  → [InputData(0, 2)]

 

 
 

VBAコードの解説

[Dim InputData(100, 2) As String] と、
[Cells(2, 12).Resize(100, 3).Value = InputData] の「100」について解説します。

下図の赤枠のセルの合計数を下回らないように設定します。

今回は適当に「100」といれましたが、

[Dim InputData(30, 2) As String] と、
[Cells(2, 12).Resize(30, 3).Value = InputData] としても、動作します。

2次元配列に設定する数値の説明
 

【エクセルマクロ】横データを縦データに入れ替える:自動化が便利
...