Excel VBA | 複数ブックにまたがって条件付きでシート全体を非表示にする

VBA
スポンサーリンク

ここでは 複数ブックにまたがって条件付きでシート全体を非表示にする VBAの例を紹介します。ポイントは「開いている複数のブックをループし、シートの内容を判定して条件に応じて ws.Visible = xlSheetHidden を設定する」ことです。


基本例:シート名に「Test」が含まれていたら非表示

Sub 複数ブックでシート非表示()
    Dim wb As Workbook
    Dim ws As Worksheet
    
    ' 開いているすべてのブックを対象
    For Each wb In Application.Workbooks
        ' このブック自身を除外したい場合は条件を追加
        If wb.Name <> ThisWorkbook.Name Then
            For Each ws In wb.Worksheets
                ' シート名に "Test" が含まれていたら非表示
                If InStr(ws.Name, "Test") > 0 Then
                    ws.Visible = xlSheetHidden
                End If
            Next ws
        End If
    Next wb
End Sub
VB

👉 開いているすべてのブックで、シート名に「Test」が含まれるシートを非表示にします。


応用例1:シート内の値で判定

Sub シート内容で非表示()
    Dim wb As Workbook
    Dim ws As Worksheet
    
    For Each wb In Application.Workbooks
        For Each ws In wb.Worksheets
            ' A1セルの値が「非表示」ならシートを隠す
            If ws.Range("A1").Value = "非表示" Then
                ws.Visible = xlSheetHidden
            End If
        Next ws
    Next wb
End Sub
VB

👉 各シートのA1セルに「非表示」と書いてあれば、そのシート全体を隠します。


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

Sub 複数条件でシート非表示()
    Dim wb As Workbook
    Dim ws As Worksheet
    
    For Each wb In Application.Workbooks
        For Each ws In wb.Worksheets
            ' 条件1: シート名が「Temp」で始まる
            ' 条件2: B2セルの値が0以下
            If Left(ws.Name, 4) = "Temp" And ws.Range("B2").Value <= 0 Then
                ws.Visible = xlSheetHidden
            End If
        Next ws
    Next wb
End Sub
VB

👉 シート名が「Temp」で始まり、かつB2セルの値が0以下なら、そのシートを非表示にします。


ポイント

  • シートを非表示にするws.Visible = xlSheetHidden
  • 完全に非表示(ユーザーが再表示できない)ws.Visible = xlSheetVeryHidden
  • 複数ブックをループFor Each wb In Application.Workbooks
  • 条件判定 → シート名やセルの値を使って柔軟に設定

練習課題

  1. 全ブックの「Sheet2」を非表示にするコードを書いてみる
  2. 各シートのC1セルが「Hide」と書かれていたら非表示にするコードを作る
  3. 複数条件を組み合わせて「シート名がTempで始まり、A1セルが0以下なら非表示」にするコードを作る

こうした仕組みを作ると、複数ブックにまたがって条件付きでシート全体を非表示にする便利ツールが完成します。

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