Excel VBA | 複数ブックにまたがって条件付きで数式を入れる

VBA
スポンサーリンク

ここでは 複数ブックにまたがって条件付きで数式を入れる VBAの例を紹介します。ポイントは「複数のブックを開いてループし、セルの値を判定して条件に応じて数式を入れる」ことです。


基本例:負の数ならABS関数、正の数なら2倍の数式

Sub 複数ブックで条件付き数式()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim c As Range
    
    ' 開いているすべてのブックを対象
    For Each wb In Application.Workbooks
        ' このブック自身を除外したい場合は条件を追加
        If wb.Name <> ThisWorkbook.Name Then
            For Each ws In wb.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 If
    Next wb
End Sub
VB

👉 開いているすべてのブックのA2~A10をチェックし、条件に応じて隣のセルに数式を入れます。


応用例1:特定のブックだけ対象にする

Sub 特定ブックに条件付き数式()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim c As Range
    
    ' 特定ブック名を指定
    For Each wb In Application.Workbooks
        If wb.Name = "SalesData.xlsx" Or wb.Name = "Budget.xlsx" Then
            For Each ws In wb.Worksheets
                For Each c In ws.Range("B2:B20")
                    If IsNumeric(c.Value) Then
                        If c.Value >= 100 Then
                            c.Offset(0, 1).Formula = "=MAX(B2:B20)"
                        Else
                            c.Offset(0, 1).Formula = "=AVERAGE(B2:B20)"
                        End If
                    End If
                Next c
            Next ws
        End If
    Next wb
End Sub
VB

👉 「SalesData.xlsx」と「Budget.xlsx」だけを対象に処理します。


応用例2:複数条件を組み合わせる

Sub 複数条件で数式を入れる_複数ブック()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim c As Range
    
    For Each wb In Application.Workbooks
        If wb.Name <> ThisWorkbook.Name Then
            For Each ws In wb.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(C2:C10)"
                            Case Is > 100
                                c.Offset(0, 1).Formula = "=MAX(C2:C10)"
                            Case Else
                                c.Offset(0, 1).Formula = "=" & c.Address & "*2"
                        End Select
                    End If
                Next c
            Next ws
        End If
    Next wb
End Sub
VB

👉 複数ブックにまたがって「負=ABS」「0=AVERAGE」「100以上=MAX」「その他=2倍」の数式を自動入力します。


ポイント

  • 複数ブックをループFor Each wb In Application.Workbooks
  • 特定ブックだけ対象If wb.Name = "Book1.xlsx" のように条件を追加
  • 複数条件IfSelect Case を使う
  • 数式を文字列として組み立てる"=ABS(" & c.Address & ")" のように結合

練習課題

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

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

タイトルとURLをコピーしました