スポンサーリンク
複数シートの非表示はできても再表示はできない
前回の記事で、Excelのシートを非表示にする方法なんてのと、また再表示する方法とを紹介した。
しかし困ったことに、複数のシートを非表示にすることはできても、複数のシートを再表示することは何故かできない。
下記の動画でも、複数シートを非表示にした後で、複数シートの再表示にチャレンジしているが、それはできないのだ。
1枚ずつ再表示するしかない。
それもあって、シートの非表示なんてそうそうやるものではなく、多くの場合は迷惑行為だ。
全てのシートを再表示するマクロ
しかしもしかしたら万一、上記動画のように複数シートをいっぺんに非表示にするなんてこと、手が滑ったりしてやってしまうかもしれない。
そういう時、全てのシートを再表示した状態に戻すマクロを作ってみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub displayAllSheets() '全てのシートの非表示を解除 If MsgBox("全てのシートの非表示を解除しますか?", vbQuestion + vbOKCancel, "確認") = vbCancel Then Exit Sub Application.ScreenUpdating = False Dim eachWs As Worksheet For Each eachWs In Worksheets eachWs.Visible = xlSheetVisible '表示する Next eachWs Application.ScreenUpdating = True End Sub |
なんのことはなく、全てのシートに対して順に、再表示を掛けているだけのマクロだ。
複数シートを非表示にし、このマクロで全て再表示する動作イメージを動画にした。
このマクロ、そう頻繁に使うとも思えないが、もし使うことがあるなら個人用マクロブックに組み込むと良いだろう。
選択されたシート以外全て非表示にするマクロ
では、上記マクロの逆で、特定のシート以外は全て非表示にするマクロなんてのもあると良い・・・かもしれない。
いやまあ、100個あるシートの中で3個だけを人にはお見せしたいとか、そういう場合にね。
でも普通はそういうの、3個のシートを切り離してなおかつ計算式のリンクも外すとかやれば済む話で、そういう手っ取り早い方法は別の記事で紹介している。
ただその方法も、切り離したシートを別名保存するとかの手間は必要になり得る。
そういう手間もひたすら省きたいというなら、特定のシート以外は全て非表示にするのが良い場合もあるかもしれない。
そこで、予め選択しておいたシート以外は非表示にするってマクロも、作ってみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Sub selectedSheetOnlyVisible() '選択されたシート以外全て非表示にする If MsgBox("選択されたシート以外を全て非表示にしますか?", vbQuestion + vbOKCancel, "確認") = vbCancel Then Exit Sub Dim ws As Worksheet Application.ScreenUpdating = False Dim selectedWs As Variant Dim dic As New Dictionary '選択されたシート名を連想配列に入れていく。 For Each selectedWs In ActiveWindow.SelectedSheets dic.Add selectedWs.Name, selectedWs.Name Next selectedWs '全シート名に対して、連想配列と照合してヒットするか確認 'ヒットしなかったもの=選択されていないシートなので、それらを非表示にする For Each ws In Worksheets If Not dic.Exists(ws.Name) Then '連想配列にヒットしなかったシートについて ws.Visible = xlSheetHidden '非表示 End If Next ws Set dic = Nothing Application.ScreenUpdating = True MsgBox "終了しました。", vbInformation, "非表示処理終了" End Sub |
ちょっとしたソースコード解説
シート名の検索に、連想配列というやつを使っている。
これは重複チェックとかで重宝するやつだけどね。
この連想配列を使うには、「Microsoft Scripting Runtime」というやつの事前設定が必要で、それについては別の個人用マクロブックに関する説明記事を参照。
あと、VBAで複数シートを選択するには、
ActiveWindow.SelectedSheets
といったように、まずウインドウWindowを指定してからその中のSelectedSheetsというやつを指定しないといけない。
単一シートなら「ActiveSheet」とか指定すればいいんだけど、複数シートの場合はWindowの指定を前に置かないといけないのが面倒。
これについては別記事でも取り上げている。
再表示・非表示のマクロを組み合わせて使う
ただ、繰り返し述べるがシートの非表示なんて、基本的には迷惑行為なので乱用は禁物。
この非表示マクロ「selectedSheetOnlyVisible」が劇薬で、その前に述べた全部再表示マクロ「displayAllSheets」が解毒薬みたいなものだ。
この両方のマクロを使った動作イメージが、下記の動画になる。
まず「3日」「5日」「7日」「8日」「10日」と離れたシートを選択しておいて、それ以外のシートを非表示にする。
そして次に、全てのシートを再表示して元に戻しているわけだ。
スポンサーリンク