【エクセルマクロ】非表示シートの判定:基本をざっくり解説するよ

エクセルマクロ非表示シートがあるか判定するアイキャッチ エクセルマクロで効率化する

エクセルマクロで、非表示のシートがあるか判定するVBAコードをご紹介します。

お客様に提出するExcelに、非表示シートが含まれていないかチェックするために作成したマクロです。

Excelに非表示シートが含まれていて、その中に思いもよらないデータが含まれていたら怖いですね。。

このページのマクロコードは、コピペで使えます。
ぜひ、お試しください!

非表示シート判定(メッセージボックスに表示)

以下のマクロを実行すると、
全シートの表示状態を確認し、メッセージボックスに判定結果を表示します。

Sub 非表示シートがあるか調べる()

Dim WS As Worksheet
Dim TargetCheck As String

    For Each WS In Worksheets

        TargetCheck = TargetCheck & WS.Name

        If WS.Visible = False Then
            TargetCheck = TargetCheck & " 非表示" & vbCrLf
        Else
            TargetCheck = TargetCheck & " 表示" & vbCrLf
        End If
        
    Next WS
    
    MsgBox TargetCheck
    
End Sub

 

マクロ実行前

ファイル内に、3つのシートが存在している状態で、
1つのシートが非表示になっています。

 

マクロ実行後

ファイル内にある全シートの、表示・非表示の状態を判定し、メッセージボックスに表示します。
メッセージボックスの左側にはシート名を表示し、右側には、表示状態が出ます。

 
 

非表示シート判定(セルに転記)

以下のマクロを実行すると、
全シートの表示状態を確認し、非表示になっているシート名をセルに転記します。

Sub 非表示シートがあるか調べて転記する()

Dim HanteiSheet As Worksheet
Dim WS As Worksheet
Dim VisibleSheet() As String
Dim Cnt As Long
Dim i As Long

    '非表示シートのシート名を転記先
    Set HanteiSheet = Sheets("判定")

    Cnt = 1

    For Each WS In Worksheets

        If WS.Visible = False Then

            '配列の要素数を設定
            ReDim Preserve VisibleSheet(Cnt)
            
            '非表示シートのシート名を配列へ格納
            VisibleSheet(Cnt) = WS.Name
            
            Cnt = Cnt + 1
        
        End If
    Next WS
    
    '判定シートに非表示になっているシート名を転記
    If Cnt >= 2 Then
        For i = 1 To UBound(VisibleSheet)
        
            '転記
            HanteiSheet.Cells(i + 1, 1) = VisibleSheet(i)
        
        Next i
    End If
    
    Set HanteiSheet = Nothing
    
End Sub

 

マクロ実行前

ファイル内に、6つのシートが存在している状態で、
3つのシートを非表示にしてマクロを実行します。

 

マクロ実行後

ファイル内にある全シートの、表示・非表示の状態を判定し、
「判定」シートに非表示のシート名を転記しました。

非表示シートが存在しない場合は、セルにはなにも転記されず空白のままになります。


 
 

非表示シート判定(ファイル指定)

以下のマクロを実行すると、指定したファイルの全シートの表示状態を確認し、
非表示になっているシート名をセルに転記します。

Sub 指定したファイルの非表示シートを判定()

Dim Target_File As Workbook
Dim Input_File As Workbook
Dim Get_Path  As String
Dim VisibleSheet() As String
Dim Cnt As Long
Dim i As Long

    '判定結果を入力するファイル
    Set Input_File = ActiveWorkbook

    '非表示シートを調べるファイルパスを取得
    Get_Path = Range("C2")
           
    'ファイルが存在する場合
    If Dir(Get_Path) <> "" Then
    
        Application.ScreenUpdating = False
            Workbooks.Open Get_Path, ReadOnly:=True
            Set Target_File = ActiveWorkbook
        Application.ScreenUpdating = True
        
    'ファイルが存在しない場合
    Else
        MsgBox "ファイルが見つかりません。"
        Exit Sub
    End If

    '配列の要素数を設定
    ReDim Preserve VisibleSheet(Target_File.Sheets.Count)
 
    Cnt = 1
    For i = 1 To Sheets.Count
 
        If Sheets(i).Visible = False Then
             
            '非表示シートのシート名を配列へ格納
            VisibleSheet(Cnt) = Sheets(i).Name
            Cnt = Cnt + 1
         
        End If
    Next i
    
    '指定したファイルを閉じる  
    Application.DisplayAlerts = False
        Target_File.Close False
    Application.DisplayAlerts = False
    
    Input_File.Activate
     
    '非表示になっているシート名を転記
    If Cnt >= 2 Then
        For i = 1 To Cnt - 1
         
            '転記
            Cells(i + 1, 1) = VisibleSheet(i)
         
        Next i
    End If
         
    Set Input_File = Nothing
                
End Sub

 

マクロ実行後

セルC2に非表示シートがあるか判定をしたいファイルパスを入力して、マクロを実行します。
A列に非表示になっているシート名が転記されます。


 

マクロ実行後も、シートの表示・非表示の状態は切り替わりません。
(マクロ実行前と同じです。)

 

マクロのエディター設定:作業が3倍速くなるおすすめ設定
...