Excel VBA 特定のシートを表示/非表示にするマクロ

Excel VBA コードサンプル

仕事で印刷用のシート以外を非表示にする必要があったので初心者なりに作ってみました。

かなり簡単なコードで済んだので重宝してます。

最初にすべてのExcelシートを表示させる

最初に全部のシートを表示させるコードを書く必要があります。エラーの原因になるためですがそれは後述。

言及されていますが、For Each~Nextループの方がシンプルでわかりやすいコードになるのでおすすめ。

特定のシート以外を非表示にするマクロ

たとえば、単にシート1~5を非表示にするとかなら上のマクロを応用すればいいんですよね。それこそFor~Nextループの出番。

しかし必要だったのは印刷用のシートを残して、集計用のシートを一括で非表示にするマクロ。あれこれ調べてデバックと格闘したところ結果的にこうなりました。

Sub 特定のシート以外を非表示()
Dim ws As Worksheet

For Each ws In Worksheets
 Select Case ws.Name
  Case "シート名1","シート名2","シート名3"
   ws.Visible = True
  Case Else
   ws.Visible = False
 End Select
Next ws
End Sub

※便宜上半角スペースを使ってますが、実際にコードを書く時はきちんとTabキーを使ってね!

”シート名1”のところに表示させたいシート名を入れるだけで動くはず。

やってることはとても単純。最初から最後のシートまで順に確認していき、特定のシート名と一致すれば表示しておく。そうでなければ非表示にする。それだけ。

IF使ったらごちゃごちゃしてわかりにくくなったのでSelect Caseを使ってみました。

今回は表示させたいシートが2~4枚だったのでこのように書きましたが、逆に非表示にしたいシートの方が少ない場合は

 Case "非表示にしたいシート名1","非表示にしたいシート名2",
  ws.Visible = False
 Case Else
  ws.Visible = True

とした方がいいと思います。

そのあたりは状況に応じて臨機応変に。

Excelのシートを表示/非表示にするマクロの注意点

普通に実行すれば完了するのですが、F8連打でデバック中に結構エラーが出たのでその要因もまとめておきますね。

  • どれか1枚はシートを表示しないといけない
  • Excelのシート名とコード中のシート名が違っていた

このマクロは条件に一致しないシートはガンガン非表示にするので、コードに書いたシート名に誤字があると全部非表示になってしまうんですね(実際やらかした)

でもExcelの仕様上、1枚はシートを表示する必要があるためエラーメッセージが出てきます。

また、シート名をコピーしてコードの該当箇所に貼り付けたのに、表示したいシートがなぜか非表示になるという事態も起きました。よくよく確認すると元々のシート名の最後に謎の半角スペースが入っていたことが原因だったという…。もちろんすぐに直しました。

こんなに簡単なコードなのに完成までに数時間かかってます。コピペ一発で済ませたいところですが、なかなかドンピシャなコードって出てこないんですよね。地道にネット上のコードを参考にしつつ試行錯誤していくしかなさそうです。

こちらのサイトにはしょっちゅうお世話になっております。いつか自力でこんなコード書けるようになりたい。

こちらもどうぞ