「列ごとの計算式を外部設定から読み込んで柔軟に適用する仕組み」です。
VBAでは 計算式を配列やシートに定義 → ループで読み込んで適用 という形にすると拡張性が高くなります。
VBA テンプレート例(外部設定シートを利用)
設定シート例
Sheet2に以下のように設定を書いておく:
| 列番号 | 計算式タイプ | パラメータ |
|---|---|---|
| 1 | MULTIPLY | 2 |
| 2 | POWER | 2 |
| 3 | SUBTRACT | 10 |
コード例
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で呼び出す仕組みにする


