ここでは 複数ブックにまたがって条件付きでセルを非表示(隠す) VBAの例を紹介します。Excelでは「セルそのものを非表示」にする機能はありませんが、行や列を非表示にすることで「セルを隠す」ことができます。条件付きで値を判定し、対象の行や列を非表示にする仕組みを作ります。
基本例:負の数がある行を非表示
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.EntireRow.Hidden = True ' 負の数なら行を非表示
Else
c.EntireRow.Hidden = False ' それ以外は表示
End If
End If
Next c
Next ws
End If
Next wb
End Sub
VB👉 開いているすべてのブックで、A列に負の数がある行を非表示にします。
応用例1:特定列を条件付きで非表示
Sub 特定列を非表示()
Dim wb As Workbook
Dim ws As Worksheet
For Each wb In Application.Workbooks
If wb.Name = "SalesData.xlsx" Or wb.Name = "Budget.xlsx" Then
For Each ws In wb.Worksheets
' B列の合計が100未満なら列を非表示
If Application.WorksheetFunction.Sum(ws.Range("B2:B20")) < 100 Then
ws.Columns("B").Hidden = True
Else
ws.Columns("B").Hidden = False
End If
Next ws
End If
Next wb
End Sub
VB👉 「SalesData.xlsx」と「Budget.xlsx」だけを対象に、B列の合計が100未満なら列を非表示にします。
応用例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:C20")
If IsNumeric(c.Value) Then
Select Case c.Value
Case Is < 0
c.EntireRow.Hidden = True ' 負の数 → 行非表示
Case 0
ws.Columns("C").Hidden = True ' 0なら列非表示
Case Is > 100
c.EntireRow.Hidden = False ' 100以上 → 表示
End Select
End If
Next c
Next ws
End If
Next wb
End Sub
VB👉 複数ブックにまたがって「負=行非表示」「0=列非表示」「100以上=表示」の条件付き処理を行います。
ポイント
- 行を非表示 →
c.EntireRow.Hidden = True - 列を非表示 →
ws.Columns("B").Hidden = True - 複数ブックをループ →
For Each wb In Application.Workbooks - 条件分岐 →
IfやSelect Caseを活用
練習課題
- 全ブックの「B列」を対象にして、負の数があればその行を非表示にする
- 特定ブックだけを対象にして、列合計が一定未満なら列を非表示にする
- 複数条件を組み合わせて「負=行非表示」「0=列非表示」「100以上=表示」にする
こうした仕組みを作ると、複数ブックにまたがって条件付きでセルを非表示(行や列を隠す)する便利ツールが完成します。


