1列ずつ配列化
Excel VBAで「表を列ごとに配列化して処理したい」場面はよくあります。
例えば「各列をまとめて分析」「列単位で検索や集計」など。ここでは初心者向けに、コード例とテンプレートをかみ砕いて説明します。
基本の考え方
- Rangeを読み込むと二次元配列になる
→[行番号, 列番号]でアクセス。 - 1列分を取り出す
→ ループで列を指定し、一次元配列にコピー。 - 用途
- 列単位で集計(例:数量列の合計)
- 列単位で検索(例:顧客コード一覧)
テンプレ1:表を読み込んで1列ずつ処理
Sub Array_ColByCol()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A2:C10") ' A=コード, B=商品名, C=数量
Dim v As Variant: v = rg.Value
Dim c As Long, r As Long
For c = 1 To UBound(v, 2)
Debug.Print "列" & c & ": ";
For r = 1 To UBound(v, 1)
Debug.Print v(r, c);
Next r
Debug.Print
Next c
End Sub
VB- ポイント:
UBound(v,2)が列数、UBound(v,1)が行数。 - 結果: 各列の内容が1列ずつ出力される。
テンプレ2:1列を一次元配列にコピー
Function GetColArray(v As Variant, colIndex As Long) As Variant
Dim arr() As Variant
Dim r As Long
ReDim arr(1 To UBound(v, 1))
For r = 1 To UBound(v, 1)
arr(r) = v(r, colIndex)
Next r
GetColArray = arr
End Function
Sub Example_ColArray()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A2:C10")
Dim v As Variant: v = rg.Value
Dim colArr As Variant
colArr = GetColArray(v, 2) ' 2列目を配列化
Dim i As Long
For i = LBound(colArr) To UBound(colArr)
Debug.Print colArr(i)
Next i
End Sub
VB- ポイント: 1列を「一次元配列」に変換して扱える。
- 用途: 列単位で検索や集計をしたいときに便利。
テンプレ3:各列を配列化して集計(例:数量列の合計)
Sub Array_ColSum()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A2:C10")
Dim v As Variant: v = rg.Value
Dim qtyArr As Variant
qtyArr = GetColArray(v, 3) ' 3列目=数量列
Dim sumQty As Double, i As Long
For i = LBound(qtyArr) To UBound(qtyArr)
sumQty = sumQty + qtyArr(i)
Next i
MsgBox "数量合計 = " & sumQty
End Sub
VB- ポイント: 列配列を使えば「数量合計」などの集計が簡単。
テンプレ4:列配列を一括結合(Join)
Sub Array_ColJoin()
Dim ws As Worksheet: Set ws = Worksheets("Data")
Dim rg As Range: Set rg = ws.Range("A2:A10")
Dim v As Variant: v = rg.Value
Dim colArr As Variant
colArr = GetColArray(v, 1) ' A列を配列化
Debug.Print Join(colArr, ", ")
End Sub
VB- ポイント: 列配列を
Joinで文字列にまとめる。ログ出力やCSV作成に便利。
例題で練習
'例1:表を読み込んで1列ずつ出力
Sub Example1()
Array_ColByCol
End Sub
'例2:2列目を一次元配列に変換
Sub Example2()
Example_ColArray
End Sub
'例3:数量列を配列化して合計
Sub Example3()
Array_ColSum
End Sub
'例4:A列をカンマ区切りで結合して出力
Sub Example4()
Array_ColJoin
End Sub
VB初心者向けポイント
- Range→配列は二次元:
[行,列]でアクセス。 - 1列だけ取り出す: ループで列を指定し、一次元配列にコピー。
- Joinで結合: 列配列を文字列にまとめるとCSV風に出力できる。
- 集計も簡単: 列配列を使えば「合計」「平均」などの計算がしやすい。
