ある程度しっかりしたシステムをマクロで作成するとき、シートを非表示にするケースがよくあります。それは作業用に一時的なシートを使うような場合です。何らかの複雑な計算したり、グラフ用にダミーのリストを作成したりするとき、その動作をユーザーに見せたくありません。そんなときは、作業用として新しいワークシートを挿入し、そのシートを非表示にしてしまうと便利です。
シートの表示と非表示を切り替えるには、WorksheetオブジェクトのVisibleプロパティを操作します。VisibleプロパティにTrueを設定すると表示され、Falseで非表示になります。次のコードはSheet2を非表示にしてメッセージを表示した後で、Sheet2を再表示します。
Sub Sample06() Worksheets("Sheet2").Visible = False MsgBox "Sheet2を非表示にしました。" & vbCrLf & "[OK]ボタンをクリックすると再表示します。" Worksheets("Sheet2").Visible = True End Sub
もしアクティブシートを非表示にした場合、旧アクティブシートの右側にあるシートがアクティブになります。もちろん、最後尾のシートがアクティブシートで、そのシートを非表示にした場合は、右側にシートがありませんので左側のシートがアクティブになります。
上の図を見てもわかるように、それまで非表示だったシートを再表示しても、再表示されたシートがアクティブにはならない点に留意してください。Addメソッドで新しいシートを挿入すると挿入されたシートがアクティブになりますが、Visibleプロパティでは異なります。
再表示されたシートがアクティブになります。また、この操作をマクロ記録すると「Worksheets("Sheet2").Visible = True」の1行しか記録されませんので、再表示すると自動的にアクティブになると勘違いしがちですが、マクロのコードで実行するとアクティブになりません。
再表示したシートをただちに操作したり、ユーザーに示したい場合は、VisibleプロパティにTrueを設定して再表示したあと、SelectメソッドやActivateメソッドでアクティブにしてやります。
WorksheetオブジェクトのVisibleプロパティにFalseを設定して非表示にしたシートは、[書式]メニューの[シート]-[再表示]で開く[再表示]ダイアログボックスから表示することができます。シートを非表示にして、[再表示]ダイアログボックスからも表示できないようにするには、VisibleプロパティにxlVeryHiddenという定数を指定します。次のコードはSheet2を非表示にして、[再表示]ダイアログボックスからも表示できないようにします。
Sub Sample06_2() Worksheets("Sheet2").Visible = xlVeryHidden End Sub
VisibleプロパティにxlVeryHiddenを設定して非表示にしたシートは、ブックを開き直したり、Excelを起動し直しても、[再表示]ダイアログボックスで表示できなくなります。ただし、シート自体は存在していますのでFor EachステートメントでWorksheetsコレクションを調べれば状況を確認できます。VisibleプロパティにxlVeryHiddenを設定した非表示シートは、マクロからVisibleプロパティにTrueを設定することで再表示できます。
冒頭で書いたように、作業用として一時的なシートを非表示で挿入することがよくあります。そんなときは、次のようにします。
Sub Sample06_3() Dim ws As Worksheet, OldSheet As Worksheet Set OldSheet = ActiveSheet ''現在のアクティブシートを記憶します Application.ScreenUpdating = False ''画面の更新を抑止します Set ws = Worksheets.Add ''シートを挿入し、以後変数wsとして操作します ws.Visible = False ''挿入したシートを表示にします OldSheet.Select ''アクティブシートを元に戻します Application.ScreenUpdating = True ''画面の更新を再開します With ws .Range("A1") = 10 ''非表示シートのセルに書き込みます .Range("A2") = 20 MsgBox "答は" & .Range("A1") + .Range("A2") & "です" Application.DisplayAlerts = False ''確認メッセージを抑止します .Delete ''非表示シートを削除します Application.DisplayAlerts = True ''確認メッセージを再開します End With End Sub
上のサンプルは、新しいシートを挿入して非表示にします。その非表示シートのセルを使って簡単な計算を行い、結果を表示した後で作業した非表示シートを削除しています。非表示になっているシートでも、セルなどを普通に操作することができます。
シートを挿入したり、表示されているアクティブシートを変えない方法などは、本編の「シートを挿入する」を参考にしてください。また最後にシートを削除していますが、DisplayAlertsプロパティにFalseを設定して確認メッセージでマクロが止まらないようにしています。これは本編の「シートを削除する」を参考にしてください。