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

Excel VBA
スポンサーリンク

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風に出力できる。
  • 集計も簡単: 列配列を使えば「合計」「平均」などの計算がしやすい。
タイトルとURLをコピーしました