Excel VBA | 配列を使った 複数列の異なる計算式 の処理テンプレ

VBA
スポンサーリンク

「列ごとの計算式を外部設定から読み込んで柔軟に適用する仕組み」です。
VBAでは 計算式を配列やシートに定義 → ループで読み込んで適用 という形にすると拡張性が高くなります。


VBA テンプレート例(外部設定シートを利用)

設定シート例

  • Sheet2 に以下のように設定を書いておく:
列番号計算式タイプパラメータ
1MULTIPLY2
2POWER2
3SUBTRACT10

コード例

Sub FlexibleMultiColumnCalc()

    Dim wsData As Worksheet, wsConfig As Worksheet
    Dim rngData As Range, arrData As Variant
    Dim arrResult() As Variant
    Dim arrConfig As Variant
    Dim i As Long, j As Long
    
    ' データと設定シートを指定
    Set wsData = ThisWorkbook.Sheets("Sheet1")
    Set wsConfig = ThisWorkbook.Sheets("Sheet2")
    
    ' データ範囲
    Set rngData = wsData.Range("A2:C10")
    arrData = rngData.Value
    
    ' 設定を配列に読み込み(列番号, 計算式タイプ, パラメータ)
    arrConfig = wsConfig.Range("A2:C4").Value
    
    ' 結果配列を用意
    ReDim arrResult(1 To UBound(arrData, 1), 1 To UBound(arrData, 2))
    
    ' データ行ごとに処理
    For i = 1 To UBound(arrData, 1)
        For j = 1 To UBound(arrData, 2)
            
            Select Case arrConfig(j, 2) ' 計算式タイプ
                Case "MULTIPLY"
                    arrResult(i, j) = arrData(i, j) * arrConfig(j, 3)
                Case "POWER"
                    arrResult(i, j) = arrData(i, j) ^ arrConfig(j, 3)
                Case "SUBTRACT"
                    arrResult(i, j) = arrData(i, j) - arrConfig(j, 3)
                Case Else
                    arrResult(i, j) = arrData(i, j) ' デフォルトはそのまま
            End Select
            
        Next j
    Next i
    
    ' 結果をシートに書き戻し(例: E列以降)
    wsData.Range("E2").Resize(UBound(arrResult, 1), UBound(arrResult, 2)).Value = arrResult

End Sub
VB

この仕組みのメリット

  • 計算式をシートに書いておけば、コードを修正せずに変更可能
  • 計算式タイプを増やせば、柔軟に拡張できる
  • 配列に読み込んで一括処理するので高速

応用アイデア

  • 計算式タイプを "ADD", "DIVIDE", "ROUND" など増やす
  • 設定シートに「対象列名」を書いておき、列番号ではなく列名で処理する
  • 計算式を VBA関数名として書いておき、Application.Run で呼び出す仕組みにする

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