
実在するのに表示できないシートとは?
どうすれば表示できるのか?目的はなんなのか?
みなさん、こんにちは。セルネッツ竹本です。
今回は、「実在するシートを表示させない設定」をテーマに、解説をしたいと思います。
結論から言うと、VBAで「Visible = xlSheetVeryHidden」を設定したシートは、シート見出しの右クリック「再表示」に出てきません。
設定値やマスタのシートを、利用者に触らせたくないときに使います。
この記事では、次のことがわかります。
- シートの3つの表示状態(表示・非表示・VeryHidden)の違い
- VBAでシートを非表示・再表示する書き方と、隠したシートの探し方
- エラーになるケースや、完全には隠せない点などの注意点
設定シートを守りたい方へ
触られたくない設定シート、仕組みで守れます
- 設定シートの初期値を誤って書き換えられる
- 見えないシートがあり、シート枚数が合わない
- 使える人やPCをツール側で制限したい
そのお悩み、操作ミスを防ぐ設計のExcelツールで解決できます。Excel専門のシステム開発会社『セルネッツ』なら、設定シートの非表示と保護、既定値の管理を組み込めます。利用者を限定する認証の仕組みも追加できます。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料
シートの3つの表示状態
シートのVisibleプロパティには、表示・非表示・VeryHiddenの3つの状態があります。
| 状態 | VBAの書き方 | 値 | 右クリックの「再表示」 |
| 表示 | xlSheetVisible(またはTrue) | -1 | — |
| 非表示 | xlSheetHidden(またはFalse) | 0 | 一覧に出て、誰でも戻せる |
| VeryHidden | xlSheetVeryHidden | 2 | 一覧に出ない |
値はMicrosoftの「XlSheetVisibility 列挙型」のとおりで、当社でも実際に確かめました。
そもそも何故、そんなことする必要があるのか
ExcelVBAツールでは、ワークシートを上手に活用することで、「ユーザの任意の設定」を反映することができます。
例えば、「部門の選択での初期値」や、「年月の既定値」などです。
これらの設定は、時に誤った操作が行われるリスクをかかえるため、それを触らせたくない。
そんな目的で隠しシートとすることがあります。
「存在自体を気づかせない」というのは、一長一短ありますが、ライセンス認証などのケースでは、ユーザに気づかれないこの仕組みを使うことがあります。
コードに直接書かず、設定シートに値を持たせる考え方は「ハードコーディングのメリット、デメリット」で解説しています。
VBAでシートを非表示にする方法
VBAからは、通常、以下の記述でシート表示のOn/Offを切り替え指定します。
このオーソドックスな方法は、単純なもので、任意のシートタブを右クリック[再表示(U)]すれば、隠されたシートが表示できます。
Worksheets(1).Visible = False '非表示
Worksheets(1).Visible = True '表示
これに対し、この方法では見えないようにするのが、「xlSheetVeryHidden」を使った以下の書き方です。
Private Sub CommandButton1_Click()
Worksheets(2).Visible = xlSheetVeryHidden
Worksheets("Sheet2").Visible = xlSheetVeryHidden
End Sub
【Point】[シート番号]でも[シート名]でもいずれでもOKです。
ただし、シート番号は非表示のシートも数に入ります。シートを並べ替えると別のシートを指すので、実務ではシート名で指定する方が安全です。
VeryHiddenのシートを再表示する方法
再表示するときは、VisibleにTrue(xlSheetVisible)を設定します。
◆表示をしたい場合は、
Private Sub CommandButton1_Click()
Worksheets(2).Visible = True
End Sub
VBAプログラムを勉強しながら、実験を繰り返すうちに、自身でも忘れてしまうことがあると思います。
何故なら、手動操作では存在自体を知ることができなくなるためです。(ちょっと怖・・・)
Excelの画面からは解除できず、VBAプログラムか、VBEの画面から解除します。
コードを書かずに戻すなら、VBE(Alt+F11)の手順が簡単です。
- Alt+F11でVBEを開き、左のプロジェクトエクスプローラーで隠したシートを選ぶ
- F4キーでプロパティウィンドウを開く
- 「Visible」を「-1 – xlSheetVisible」に変える
ブックを開いたときに自動で表示・非表示を切り替える場合は、ThisWorkbookのWorkbook_Openに書きます(ThisWorkbookに何を書くか、プロの活用提案)。
非表示のシートを一覧で確認する
こんなケースで、実は、ブックのシート枚数が正しく認識できていないケースは少なくありませんので、シート枚数をVBAプログラムで確認し、目視枚数と一致しているかどうか。プロの現場では必ずチェックが行われます。
次のコードで、すべてのシートの名前と表示状態をイミディエイトウィンドウ(Ctrl+G)に書き出せます。
Sub シートの表示状態を一覧にする()
Dim ws As Worksheet
Debug.Print "シート数:" & ThisWorkbook.Worksheets.Count
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Visible
Case xlSheetVisible: Debug.Print ws.Name, "表示"
Case xlSheetHidden: Debug.Print ws.Name, "非表示"
Case xlSheetVeryHidden: Debug.Print ws.Name, "VeryHidden"
End Select
Next ws
End Sub
すべてを再表示したいときは、ループの中で「ws.Visible = xlSheetVisible」とします。
For Eachで全シートを回すと、隠したシートも対象になる点は「For Each〜Nextによる全シート操作に潜むリスク」で解説しています。
シートを非表示にするときの注意点
当社でExcelを実際に動かして確かめた、つまずきやすい点は次のとおりです。
| 状況 | 結果 | 対策 |
| 表示中のシートが1枚だけのときに隠す | エラー(Visible プロパティを設定できません) | 先に別のシートを表示しておく |
| VeryHiddenのシートをSelectする | エラー | 選択せず、シートを指定して直接読み書きする |
| VeryHiddenのシートをコピーする | エラー | 一度表示してからコピーし、元に戻す |
| ブックの構造を保護している | 表示・非表示とも変更できない | 保護を解除してから変更し、保護し直す |
なお、VeryHiddenのシートでも、選択せずに値を書き込むことはできました。
VBEを開ける人には見えてしまう
VeryHiddenは、Excelの画面から見えなくするだけの機能です。VBEのプロジェクトエクスプローラーには、シートが表示されます。
ライセンス情報などを守るなら、VBAプロジェクトのパスワード保護と、ブックの構造の保護を組み合わせてください。
社外に渡すブックに残さない
ブックごと保存して渡すと、隠したシートもそのまま相手に渡ります。送るシートだけを新しいブックにコピーする方法は「xlsmをxlsxに変換して保存する方法」で紹介しています。
マクロの最初にシートの状態をそろえる考え方は「ワークシートのリセット処理でバグ発生率を下げる方法」をご覧ください。
よくある質問
VBAを使わずに、シートを完全に非表示にできますか?
できます。VBE(Alt+F11)のプロパティウィンドウで、Visibleを「2 – xlSheetVeryHidden」にします。
コードを書かなくても、右クリックの「再表示」に出ないシートになります。
非表示のシートにVBAで値を書き込めますか?
書き込めます。「Worksheets(“設定”).Range(“A1”).Value = 1」のように、シートを指定して直接書き込みます。
Selectを使うとエラーになるため、使わない書き方にします。
シートを隠したらマクロでエラーが出るようになりました
隠したシートをSelectしているか、シート番号の指定がずれていることが多いです。
上の一覧のコードで表示状態を確かめ、シート名で指定し直してください。
まとめ
- Visible = xlSheetVeryHidden のシートは、右クリックの「再表示」に出ない
- 戻すときは Visible = True。VBEのプロパティウィンドウからも戻せる
- 最後の1枚は隠せない。SelectとCopyはエラーになる
- VBEからは見えるので、守りたい情報はパスワード保護と組み合わせる
触らせたくない、見られたくないシートは、目的をもって設定する分には、有効な方法とも言えるでしょう。
今回のテーマは、「実在するシートを表示させない設定」について、解説を行いました。
本記事が、Excel実務の効率化において、ご参考お役立てになれば幸いです。
相見積もり歓迎
隠しシートの多いブックの調査もお任せください
- 前任者のブックの隠れた構成を調べて整理
- 作業単価は基本料金50,000円+時間単価
- システム導入相談は60分無料
前任者が作ったブックに、見えないシートや設定が残っていることは珍しくありません。構成の調査から改修まで、基本料金50,000円+時間単価(開発10,000円/時・税別)でお見積もりします。相見積もりも歓迎です。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料
Excel業務改善事例ショート動画
文章だけでは伝わりにくい改善事例を、ショート動画でご覧いただけます。
◆よくある質問 ◆Excel業務改善の実例 ◆VBA・マクロ活用事例
