Excelマクロで縦並びデータを横並びにするためのVBAコードについてご紹介します。
セルのデータの読み込み・出力、繰り返し処理等の基本の動きをマスターできます。
このExcelマクロでできること
セルに入力した縦並びのデータを読み込み、横に並び替えます。
![](https://kitlog116.com/wp-content/uploads/2022/09/tate-yoko-1-1024x458.png)
![](https://kitlog116.com/wp-content/uploads/2023/01/nemu-150x150.png)
そもそもExcelマクロ・VBAって何?どうやって始めるの?という方は、下記の記事をチェック!
![](https://kitlog116.com/wp-content/uploads/2021/10/stanley-dai-73OZYNjVoNI-unsplash-160x90.jpg)
【初心者向け】メンドウ作業の効率化・自動化への第一歩!マクロ・VBAの始め方➀ -初期設定-
Excelのマクロ・VBAを始める方法について解説します。他のプログラミング言語と比較して、VBAは複雑な環境構築が不要なため、非常に簡単に始めることができます。ぜひこの記事を読んで、マクロ・VBAの世界への第一歩を踏み出してください。
![](https://kitlog116.com/wp-content/uploads/2021/10/stanley-dai-73OZYNjVoNI-unsplash-160x90.jpg)
【初心者向け】メンドウ作業の効率化・自動化への第一歩!マクロ・VBAの始め方② -マクロ開発の大まかな流れ-
マクロ開発のチュートリアルとして、実際にVBEを起動し、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
コメント