Excel VBA | 2次元配列を使った表データ処理の実務サンプル集

VBA
スポンサーリンク

こちらに「2次元配列を使った表データ処理の実務サンプル集」をまとめました。
Excelの表データを一括で配列に読み込み、加工してから書き戻すことで、処理速度と効率が大幅に向上します。


実務サンプル集(2次元配列)

1. セル範囲を配列に読み込む

Sub LoadRangeToArray()
    Dim arr As Variant
    ' A1:C10 の範囲を配列に格納(1始まりの2次元配列になる)
    arr = Range("A1:C10").Value
    
    MsgBox "行数: " & UBound(arr, 1) & " 列数: " & UBound(arr, 2)
End Sub
VB

👉 セル範囲を一括で配列に読み込む。1セルずつループするより高速。


2. 配列をセル範囲に一括書き戻す

Sub WriteArrayToRange()
    Dim arr(1 To 3, 1 To 2) As Variant
    
    arr(1, 1) = "商品A": arr(1, 2) = 100
    arr(2, 1) = "商品B": arr(2, 2) = 200
    arr(3, 1) = "商品C": arr(3, 2) = 300
    
    Range("E1:F3").Value = arr
End Sub
VB

👉 配列を一括でセルに出力。大量データ処理で有効。


3. 配列内でデータ加工(数値加算)

Sub ProcessArray()
    Dim arr As Variant
    Dim i As Long, j As Long
    
    arr = Range("B2:D6").Value
    
    For i = 1 To UBound(arr, 1)
        For j = 1 To UBound(arr, 2)
            If IsNumeric(arr(i, j)) Then
                arr(i, j) = arr(i, j) * 1.1 ' 10%加算
            End If
        Next j
    Next i
    
    Range("F2:H6").Value = arr
End Sub
VB

👉 配列上で計算処理を行い、結果をまとめて書き戻す


4. 条件抽出(特定列の値でフィルタ)

Sub FilterArray()
    Dim arr As Variant, result() As Variant
    Dim i As Long, r As Long
    
    arr = Range("A2:C10").Value
    ReDim result(1 To UBound(arr, 1), 1 To UBound(arr, 2))
    r = 1
    
    For i = 1 To UBound(arr, 1)
        If arr(i, 2) >= 100 Then ' B列が100以上
            result(r, 1) = arr(i, 1)
            result(r, 2) = arr(i, 2)
            result(r, 3) = arr(i, 3)
            r = r + 1
        End If
    Next i
    
    If r > 1 Then
        Range("E2").Resize(r - 1, 3).Value = result
    End If
End Sub
VB

👉 条件に合う行だけを抽出して別の場所に出力


5. ソート処理(簡易版)

Sub SortArrayByColumn()
    Dim arr As Variant
    Dim i As Long, j As Long, tmp As Variant
    
    arr = Range("A2:C10").Value
    
    ' B列(2列目)で昇順ソート
    For i = LBound(arr, 1) To UBound(arr, 1) - 1
        For j = i + 1 To UBound(arr, 1)
            If arr(i, 2) > arr(j, 2) Then
                tmp = arr(i, 1): arr(i, 1) = arr(j, 1): arr(j, 1) = tmp
                tmp = arr(i, 2): arr(i, 2) = arr(j, 2): arr(j, 2) = tmp
                tmp = arr(i, 3): arr(i, 3) = arr(j, 3): arr(j, 3) = tmp
            End If
        Next j
    Next i
    
    Range("E2:G10").Value = arr
End Sub
VB

👉 配列上でソートしてから書き戻す。大量データでも高速。


✅ まとめ

  • 読み込みRange.Value → 配列
  • 加工:配列上で計算・条件判定・ソート
  • 書き戻し:配列 → Range.Value
  • メリット:セルを1つずつ操作するより圧倒的に高速

💡 この仕組みを応用すれば、CSVや外部データを配列に読み込んで加工 → Excelに一括出力といった処理も効率的に実装できます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました