1行ずつ配列化
Excel VBAで「表を1行ずつ配列にして処理したい」場面はよくあります。
例えば「各行をまとめて処理」「行単位で検索や集計」など。ここでは初心者向けに、コード例とテンプレートをかみ砕いて説明します。
基本の考え方
- Rangeを読み込むと二次元配列になる
→[行番号, 列番号]でアクセス。 - 1行分を取り出す
→ ループで行を指定し、1行だけを一次元配列にコピー。 - 用途
- 行単位で処理(例:商品ごとに集計)
- 行単位で検索(例:コード一致)
テンプレ1:表を読み込んで1行ずつ処理
Sub Array_RowByRow()
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 r As Long, c As Long
For r = 1 To UBound(v, 1)
Debug.Print "行" & r & ": ";
For c = 1 To UBound(v, 2)
Debug.Print v(r, c);
Next c
Debug.Print
Next r
End Sub
VB- ポイント:
UBound(v,1)が行数、UBound(v,2)が列数。 - 結果: 各行の内容が1行ずつ出力される。
テンプレ2:1行を一次元配列にコピー
Function GetRowArray(v As Variant, rowIndex As Long) As Variant
Dim arr() As Variant
Dim c As Long
ReDim arr(1 To UBound(v, 2))
For c = 1 To UBound(v, 2)
arr(c) = v(rowIndex, c)
Next c
GetRowArray = arr
End Function
Sub Example_RowArray()
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 rowArr As Variant
rowArr = GetRowArray(v, 3) ' 3行目を配列化
Dim i As Long
For i = LBound(rowArr) To UBound(rowArr)
Debug.Print rowArr(i)
Next i
End Sub
VB- ポイント: 1行を「一次元配列」に変換して扱える。
- 用途: 行単位で検索や加工をしたいときに便利。
テンプレ3:各行を配列化して処理(例:数量が100以上の行だけ)
Sub Array_RowFilter()
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 r As Long, rowArr As Variant
For r = 1 To UBound(v, 1)
rowArr = GetRowArray(v, r)
If rowArr(3) >= 100 Then
Debug.Print "コード=" & rowArr(1), "商品=" & rowArr(2), "数量=" & rowArr(3)
End If
Next r
End Sub
VB- ポイント: 行ごとに配列化して条件判定。
- 結果: 数量が100以上の行だけ出力。
テンプレ4:行配列を一括結合(Join)
Sub Array_RowJoin()
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 r As Long, rowArr As Variant
For r = 1 To UBound(v, 1)
rowArr = GetRowArray(v, r)
Debug.Print Join(rowArr, ", ")
Next r
End Sub
VB- ポイント: 行配列を
Joinで文字列にまとめる。ログ出力やCSV作成に便利。
例題で練習
'例1:表を読み込んで1行ずつ出力
Sub Example1()
Array_RowByRow
End Sub
'例2:3行目を一次元配列に変換
Sub Example2()
Example_RowArray
End Sub
'例3:数量が100以上の行だけ出力
Sub Example3()
Array_RowFilter
End Sub
'例4:各行をカンマ区切りで結合して出力
Sub Example4()
Array_RowJoin
End Sub
VB初心者向けポイント
- Range→配列は二次元:
[行,列]でアクセス。 - 1行だけ取り出す: ループで行を指定し、一次元配列にコピー。
- Joinで結合: 行配列を文字列にまとめるとCSV風に出力できる。
- 条件判定も簡単: 行配列を使えば「数量が100以上」などの判定がしやすい。
