Excel VBA 逆引き集 | 1行ずつ配列化

Excel VBA
スポンサーリンク

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以上」などの判定がしやすい。
タイトルとURLをコピーしました