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

自作マクロ

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

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

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

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

そもそもExcelマクロ・VBAって何?どうやって始めるの?という方は、下記の記事をご参照ください!

VBAソースコードと解説

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

Sub yokowotate()
' **********************************************
' 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

    ' データの縦の個数の読み込み
    nrow = Range("a" & Rows.Count).End(xlUp).Row - 1
    ' データの横の個数の読み込み
    ncol = Range("A2").End(xlToRight).Column

    ' データ読み込み
    For i = 1 To nrow           '行数
        js = (i - 1) * ncol + 1 '行毎のdata始め
        je = js + ncol - 1        '行毎のdata終わり
        countj = 0                  '読み込む列位置
        For j = js To je
            countj = countj + 1
            data(j) = Cells(i + 1, countj)
        Next j
    Next i
    
    ' データの個数
    ndata = nrow * ncol

    ' データを縦並びにして、シート[縦並びout]出力
    Worksheets("縦並びout").Activate
    For i = 1 To ndata
         Cells(i, 1) = data(i)
    Next i
    
    ' 画面の更新を再開
    Application.ScreenUpdating = True
    
End Sub

コメント

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