Excel VBA | 複数列を配列で扱う例(2次元配列処理)

VBA
スポンサーリンク

Excel VBA で Range.Value を配列に読み込むと、二次元配列(行 × 列)として扱えます。
これを使うと「複数列のデータをまとめて処理 → 一括で書き戻す」ことができます。


基本の考え方

  • Range("B2:D10").Valuearr(行番号, 列番号) の二次元配列になる
  • 行番号は 1~行数、列番号は 1~列数
  • UBound(arr, 1) → 行数
  • UBound(arr, 2) → 列数

実装例①:単価 × 数量 → 金額を計算

シナリオ: B列=単価, C列=数量, D列=金額 を計算して書き戻す。

Sub CalcAmount()
    Dim arr As Variant
    Dim i As Long
    
    ' B2:D100 を配列に読み込む
    arr = Range("B2:D100").Value
    
    ' 行ごとに計算
    For i = 1 To UBound(arr, 1)
        If IsNumeric(arr(i, 1)) And IsNumeric(arr(i, 2)) Then
            arr(i, 3) = arr(i, 1) * arr(i, 2)   '金額列に計算結果を代入
        End If
    Next i
    
    ' 一括で書き戻す
    Range("B2:D100").Value = arr
End Sub
VB

実装例②:複数列の条件付き処理

シナリオ: 売上表(A列=商品名, B列=数量, C列=単価, D列=売上)で、数量が10以上なら売上を赤字にする。

Sub HighlightSales()
    Dim arr As Variant
    Dim i As Long
    
    ' A2:D50 を配列に読み込む
    arr = Range("A2:D50").Value
    
    ' 条件判定
    For i = 1 To UBound(arr, 1)
        If IsNumeric(arr(i, 2)) And arr(i, 2) >= 10 Then
            arr(i, 4) = arr(i, 2) * arr(i, 3)   '売上を計算
        End If
    Next i
    
    ' 書き戻し
    Range("A2:D50").Value = arr
    
    ' 書式設定はセルに直接アクセス(配列では色を持てない)
    For i = 2 To 50
        If Cells(i, 2).Value >= 10 Then
            Cells(i, 4).Font.Color = vbRed
        End If
    Next i
End Sub
VB

実装例③:複数列の平均を計算

シナリオ: テスト点数(B列=国語, C列=数学, D列=英語)から平均点を E列に出す。

Sub CalcAverage()
    Dim arr As Variant
    Dim i As Long
    
    ' B2:D30 を配列に読み込む
    arr = Range("B2:D30").Value
    
    ' 平均計算
    For i = 1 To UBound(arr, 1)
        If IsNumeric(arr(i, 1)) And IsNumeric(arr(i, 2)) And IsNumeric(arr(i, 3)) Then
            arr(i, 3) = arr(i, 3)   '英語はそのまま
            ' 平均を新しい列に追加するため、配列拡張は不可 → 別列に直接書き込み
            Range("E" & i + 1).Value = (arr(i, 1) + arr(i, 2) + arr(i, 3)) / 3
        End If
    Next i
End Sub
VB

✅ まとめ

  • 配列に読み込むと「行×列」の二次元配列になる
  • 大量データを一括処理 → 高速化
  • 計算や加工は配列で、書式設定はセルに直接アクセス

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