【Excelマクロ】縦並びのデータを横並びへ変換する

自作マクロ

Excelマクロで縦並びデータを横並びにするためのVBAコードについてご紹介します。
セルのデータの読み込み・出力、繰り返し処理等の基本の動きをマスターできます。

このExcelマクロでできること

セルに入力した縦並びのデータを読み込み、横に並び替えます。

このExcelマクロでできること

そもそもExcelマクロ・VBAって何?どうやって始めるの?という方は、下記の記事をチェック!

VBAソースコードと解説

下記のソースコードを標準モジュールにコピペすることで、縦並びのデータを横並びに変換するマクロを使用することができます。
下記では既存のシート[縦を横]の2行目以降に入力した縦並びのデータとセルC2に入力した出力データの列数を読み込み、新規シート[横並びout]へ出力することを想定しています。
ご自身の用途に合わせてアレンジしてください。

Sub tatewoyoko()
' **********************************************
' Summary:縦並びのデータを横並びに変換
' Description:任意の横個数に対応
' **********************************************
    Dim i , j As Long.                     '繰り返し用
    Dim nrow, ncol As Long.        '出力データの行,列の個数
    Dim ndata As Long                 '元データの個数
    Dim data(50000) As Double '読み込みデータ
    Dim js, je As Long.                  '読み込み時の始め,終わりの個数
    Dim countj As Long                '出力する列位置

    ' 画面の更新を抑止
    Application.ScreenUpdating = False
    
    'シート[横並びout]を削除
    On Error Resume Next
    Application.DisplayAlerts = False
       Worksheets("横並びout").Delete
    Application.DisplayAlerts = True
    
    'シート[横並びout]を一番右に追加
    Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "横並びout"

    ' シート[縦を横]に移動
    Worksheets("縦を横").Activate

    ' データの個数を読み込み
    ndata = Range("A" & Rows.Count).End(xlUp).Row - 1

    ' データ読み込み
    For i = 1 To ndata
        data(i) = Cells(i + 1, 1)
    Next i
    
    '出力データの列数を読み込み
    ncol = Cells(2, 3)
    '出力データの行数を算定
    nrow = Int((ndata - 1) / ncol) + 1
    
    'シート[横並びout]に出力
    Worksheets("横並びout").Activate
    For i = 1 To nrow           '行数
        js = (i - 1) * ncol + 1 '行毎のdata始め
        je = js + ncol - 1        '行毎のdata終わり
        If i = nrow Then         '最終行の時は、
            je = ndata              'dataの終わに
        End If
        countj = 0                  '出力する列位置
        For j = js To je
            countj = countj + 1
            Cells(i, countj) = data(j)
        Next j
    Next i

    ' 画面の更新を再開
    Application.ScreenUpdating = True
    
End Sub

コメント

タイトルとURLをコピーしました