エクセルマクロで、非表示のシートがあるか判定する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列に非表示になっているシート名が転記されます。
マクロ実行後も、シートの表示・非表示の状態は切り替わりません。
(マクロ実行前と同じです。)
この記事がお役に立ちますと幸いです。
「Excel自動化[最強]時短仕事術」
自動化の基礎と時短に役立つテクニック解説書
毎日の定型業務を手際良く行え、大幅な業務効率化を実現!