ここでは 複数シートにまたがって条件付きで数式を自動入力する VBAの例を紹介します。ポイントは「シートをループしながらセルの値を判定し、その条件に応じて数式を入れる」ことです。
基本例:負の数ならABS関数、正の数なら2倍の数式
Sub 複数シートで条件付き数式()
Dim ws As Worksheet
Dim c As Range
' 全シートを対象にループ
For Each ws In Worksheets
' 各シートの対象範囲を指定(例: A2:A10)
For Each c In ws.Range("A2:A10")
If IsNumeric(c.Value) Then
If c.Value < 0 Then
' 負の数なら絶対値を返す数式を隣のセルに入れる
c.Offset(0, 1).Formula = "=ABS(" & c.Address & ")"
Else
' 正の数なら2倍の数式を隣のセルに入れる
c.Offset(0, 1).Formula = "=" & c.Address & "*2"
End If
End If
Next c
Next ws
End Sub
VB👉 すべてのシートで、A列の値をチェックし、B列に条件付きで数式が自動入力されます。
応用例1:複数条件を組み合わせる
Sub 複数条件で数式を入れる()
Dim ws As Worksheet
Dim c As Range
For Each ws In Worksheets
For Each c In ws.Range("C2:C10")
If IsNumeric(c.Value) Then
Select Case c.Value
Case Is < 0
c.Offset(0, 1).Formula = "=ABS(" & c.Address & ")"
Case 0
c.Offset(0, 1).Formula = "=AVERAGE(A2:A10)"
Case Is > 100
c.Offset(0, 1).Formula = "=MAX(A2:A10)"
Case Else
c.Offset(0, 1).Formula = "=" & c.Address & "*2"
End Select
End If
Next c
Next ws
End Sub
VB👉 値が負なら絶対値、0なら平均、100以上なら最大値、それ以外は2倍の数式を入れる例です。
応用例2:特定シートだけ対象にする
Sub 特定シートに条件付き数式()
Dim ws As Worksheet
Dim c As Range
For Each ws In Worksheets(Array("Sheet1", "Sheet3"))
For Each c In ws.Range("D2:D10")
If IsNumeric(c.Value) Then
If c.Value >= 50 Then
c.Offset(0, 1).Formula = "=" & c.Address & "*1.1"
Else
c.Offset(0, 1).Formula = "=" & c.Address & "*0.9"
End If
End If
Next c
Next ws
End Sub
VB👉 「Sheet1」と「Sheet3」だけを対象に、値が50以上なら1.1倍、未満なら0.9倍の数式を入れる例です。
ポイント
- 複数シートをループ →
For Each ws In Worksheets - セルの値を判定 →
If IsNumeric(c.Value) - 条件分岐 →
IfやSelect Case - 数式を文字列として組み立てる →
"=ABS(" & c.Address & ")"のように結合 - 結果を隣のセルに入れる →
c.Offset(0,1)
練習課題
- 全シートの「B列」を対象にして、負の数は
ABS、正の数はROUNDを入れる - 特定シートだけを対象にして、値が100以上なら「平均」、それ以外は「合計」を入れる
- 複数条件を組み合わせて「負=ABS」「0=AVERAGE」「正=2倍」「100以上=MAX」にする
こうした仕組みを作ると、複数シートにまたがって条件付きで数式を自動入力する便利ツールが完成します。


