Excelマクロで横並びデータを縦並びにするためのVBAコードについてご紹介します。
セルのデータの読み込み・出力、繰り返し処理等の基本の動きをマスターできます。
このExcelマクロでできること
セルに入力した横並びのデータを読み込み、縦に並び替えます。
![](https://kitlog116.com/wp-content/uploads/2022/09/yoko-tate-1024x441.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行目以降に入力した横並びのデータを読み込み、新規シート[縦並び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
コメント