以下のように、「表示切替」ボタンを押すことで、複数あるシートから今月のシートのみを表示することができ、再度ボタンを押すことで、すべてのシートを表示することができる仕組みの実現方法について紹介します。

※こちらで開発したファイルは、記事の最後にて配布しています。
1. 開発準備
今回は、以下のように「1月」から「12月」という名前のシートが含まれるブックに対して実現していきます。

また、「設定」シートの「表示切替」ボタンを配置する予定のセルに、「TRUE」もしくは「FALSE」と入力します。

この値は、現在のシートの状態を表しています。
「TRUE」ならば、すべてのシートが表示されている状態、「FALSE」ならば、一部のシートが非表示の状態になります。
※仕組みを実装する前は、シートの状態に関係なく「TRUE」もしくは「FALSE」の値を入力しておきます。
次に、[開発]タブを選択し、[マクロ]を選択します。

以下の画面にて、開発する機能の名前を入力し、[作成]を選択します。
こちらでは、「ToggleSheetView」と入力しています。

次に表示される以下の画面の「Sub ○○」から「End Sub」の間にコードを記述します。
「Option Explicit」は、VBEの設定内容次第では表示されません。「Option Explicit」についての解説はこちらでは省略します。

2. コードの記述
以下のコードを記述します。
Sub ToggleSheetView()
Dim ws As Worksheet
Set ws = Worksheets("設定")
Dim m As Long
m = Month(Date)
Dim ckRng As Range
Set ckRng = ws.Range("B3")
ckRng.Value = Not ckRng.Value
Dim i As Long
For i = 1 To 12
On Error Resume Next
With Worksheets(i & "月")
If i = m Or ckRng.Value Then
.Visible = xlSheetVisible
Else
.Visible = xlSheetHidden
End If
End With
On Error GoTo 0
Next i
ws.Activate
End Sub
では、コードについて解説していきます。
Dim ws As Worksheet
Set ws = Worksheets("設定")
Dim m As Long
m = Month(Date)
シート情報を割り当てる用の変数(ws)を用意し、ボタンを配置する予定の「設定」シートを割り当てています。
次に、現在の月を格納する用の変数(m)を用意し、現在の月を格納しています。
Dim ckRng As Range
Set ckRng = ws.Range("B3")
ckRng.Value = Not ckRng.Value
シートの表示非表示の状態を表す値が入力されたセルの情報を割り当てる用の変数(ckRng)を用意し、対象のセル(「設定」シート(ws)のセルB3)を割り当てています。
そして、その対象のセルの現在の値を、「TRUEならばFALSE」、「FALSEならばTRUE」と反転させています。
Dim i As Long
For i = 1 To 12
On Error Resume Next
With Worksheets(i & "月")
'省略
End With
On Error GoTo 0
Next i
繰り返し処理で使う用の変数(i)を用意し、Forで「1」から「12」まで1つずつ繰り返しています。
「For~Next」の中では、「1月」から「12月」のシートを1つずつ繰り返しています。
「Worksheets(i & “月”)」と直接シート名で指定しているため、対象のシート名のシートが存在しないときにエラーになってしまいます。
その対策として、「On Error Resume Next」と「On Error GoTo 0」を記述しています。
「On Error Resume Next」で、それ以降でエラーになった際に、エラーを飛ばして処理を実行することができます。
「On Error GoTo 0」で、「On Error Resume Next」の設定を解除しています。
If i = m Or ckRng.Value Then
.Visible = xlSheetVisible
Else
.Visible = xlSheetHidden
End If
Withの中で、「繰り返された対象の月と実行したときの月が同じ場合」、もしくは、「シートの表示非表示の状態を表すセルの値がTRUEの場合」は、繰り返された対象の月のシートを表示しています。
それ以外の場合は、繰り返された対象の月のシートを非表示にしています。
※「With」から「End With」で囲まれている範囲内は、「With」で指定した情報を省略して「.」から記述することができます。
ws.Activate
シートの表示非表示を切り替える処理で、選択されているシートが変わってしまうことがあるため、最後に「設定」シートを選択しています。
3. ボタンの作成
コードが完成したら、実行用のボタンを用意します。
ボタンは、[開発]タブの中の[挿入]から作成することができます。

4. 完成
以上の手順で完成です。
「設定」シートに配置した「表示切替」ボタンを押すことで、シートの表示非表示を切り替えることができます。

▼サンプルファイル▼





























































































