こちらの記事はエクセルVBAをあまり知らない方でも利用できる「コピペでVBA(Excel)」としてもご活用できます。詳しくは以下の記事をご確認ください。
このマクロの解説
このコードを実行すると、アクティブなブック内の複数のシートを一括で非表示にできます。シート名に任意の文字列が含まれているシートが非表示になります。下記のコードでは、シート名に「nn」が含まれているシートを非表示にします。ただし、全てのシートを非表示にすることはエクセルの仕様上できません。設定した任意の文字列がどのシートのシート名にも含まれている場合はエラーが発生します。
反対の処理はこちら↓↓↓
注意点
- 任意の文字列は部分一致
- 任意の文字列の大文字と小文字は区別される
- 任意の文字列は英数字だけでなく漢字や記号も使用可能
- 任意の文字列がすべてのシートに該当するとエラーが発生
このマクロのコード
Private Sub 複数シート一括非表示() Dim s As Worksheet For Each s In Worksheets If InStr(s.Name, "nn") > 0 Then s.Visible = False End If Next s End Sub
※コードをコピーする時は、右上のアイコンをクリックしてください
このマクロを使う理由
エクセルの編集者と閲覧者が異なる場合に、閲覧時には編集時だけに利用しているシートを非表示にしたい場合があります。非表示にしたいシートが多数であったり、非表示にする頻度が多かったりする場合は意外に手間がかかり煩わしいです。このマクロを使うと一瞬で非表示にしたいシートを非表示にできます。たとえば、非表示にしたいシート名を「secret_○○」のように通常の名称の手前に「secret_」と入れておき、コードにIf InStr(s.Name, "secret_") > 0 Then
と記述することで、簡単に非表示にすることができます。
プラスワン:処理対象を抽出する条件を変更する
上記のコードは、非表示にするシートの名称を部分一致で指定しています。これは柔軟性が高い代わりにシート名の構成によっては不便な場合があります。コードの4行目で条件分岐をさせて処理するシートを決定しています。ここを少し変更することで他の条件をつけることが可能です。たとえば、エクセルの関数にもあるLEFT関数はVBAでも利用できます。シート名の左から2文字が「s_」の場合に非表示にする条件(前方一致)にしたものが下記のコードです。これで部分一致よりは限定した条件にすることが可能です。同様にRight関数で後方一致を条件とすることもできます。
Private Sub 複数シート一括非表示() Dim s As Worksheet For Each s In Worksheets If Left(s.Name, 2) = "s_" Then s.Visible = False End If Next s End Sub
※コードをコピーする時は、右上のアイコンをクリックしてください