表示/非表示する


ある程度しっかりしたシステムをマクロで作成するとき、シートを非表示にするケースがよくあります。それは作業用に一時的なシートを使うような場合です。何らかの複雑な計算したり、グラフ用にダミーのリストを作成したりするとき、その動作をユーザーに見せたくありません。そんなときは、作業用として新しいワークシートを挿入し、そのシートを非表示にしてしまうと便利です。

シートの表示はVisibleプロパティ

シートの表示と非表示を切り替えるには、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を設定して確認メッセージでマクロが止まらないようにしています。これは本編の「シートを削除する」を参考にしてください。