Excel VBA | 複数シートにまたがって条件付きで数式を自動入力する

VBA
スポンサーリンク

ここでは 複数シートにまたがって条件付きで数式を自動入力する 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)
  • 条件分岐IfSelect Case
  • 数式を文字列として組み立てる"=ABS(" & c.Address & ")" のように結合
  • 結果を隣のセルに入れるc.Offset(0,1)

練習課題

  1. 全シートの「B列」を対象にして、負の数は ABS、正の数は ROUND を入れる
  2. 特定シートだけを対象にして、値が100以上なら「平均」、それ以外は「合計」を入れる
  3. 複数条件を組み合わせて「負=ABS」「0=AVERAGE」「正=2倍」「100以上=MAX」にする

こうした仕組みを作ると、複数シートにまたがって条件付きで数式を自動入力する便利ツールが完成します。

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