エクセル雑感
保護されたブックの非表示シートについて

ExcelマクロVBAとエクセル関数についての私的雑感
公開日:2020-04-17 最終更新日:2020-04-17

保護されたブックの非表示シートについて


保護されたブックの非表示シートは通常の方法では確認することができません。
このような非表示シートのセル値を、どうやって確認するかについてツイッターに連投しました。
本記事は、連投したツイートに、画像と追加説明を加えてまとめたものです。



VBA マクロ ブック保護 非表示シート

ツイート原文

非表示シートは、
・印刷できません
・コピーで新規ブック作成できません
そして、最も重要なことは、
・非表示シートは見えません。

追加説明

非表示シートは、
VBAでも印刷もプレビュー表示もできません。
Copyメソッドで、引数省略して新規ブック作成はできません。
他ブックへのコピーは、非表示の種類によって変わります。
Visibleプロパティが、
0 :xlSheetHidden ・・・ 他ブックへコピー可能
2 :xlSheetVeryHidden ・・・ 他ブックへコピー不可

第69回.シートの非表示(Visible,Hidden)|VBA入門
ユーザーが操作・閲覧する必要のないシートは非表示にする事で使い易いExcelブックにします。マスタ情報やマクロでのみ使用するデータが入っているシート等、通常は使用者が変更することがなく、見る必要もないのであれば、シート保護をするより非表示にしてしまった方が、ユーザーにとっては使いやすいブックとなります。
第71回.印刷(PrintOut)|VBA入門
シートの内容をマクロVBAで印刷する場合は、PrintOutメソッドを使用します。このPrintOutメソッドが使える対象オブジェクトは複数あります。ブック、シート、セル、それぞれにPrintOutメソッドが存在するので、印刷範囲によって使い分けてください。

VBA マクロ ブック保護 非表示シート

ツイート原文

どこからかExcelファイルをもらいました。
数式などいろいろ確認していると、どうも非表示シートがあるようです。
でも、シートタブを右クリックしても「再表示」はクリックできません。非表示シートはあるはずなのですが・・・
さて、どうしたら良いでしょうか。

追加説明

実際には非表示シートがあったとしても、
・ブックが保護されている
・Visibleプロパティが、2 :xlSheetVeryHidden
これらの時は、手動ではシート表時させることはできません。

VBA マクロ ブック保護 非表示シート


エクセル Excel サンプル画像

ツイート原文

そんな時は、なにはさておき、
Alt + F11
さて、左のプロジェクトの下に目的のシート名は見えていますか。(見えていない場合の事は2回くらい後で)
見えているなら、それをクリックしてプロパティウィンドウを見てみましょう。
何?、プロパティウィンドウがないですと、
それならF4を押してみよう。

追加説明

Alt + F11は、VBEを表示するショートカットです。

VBA マクロ ブック保護 非表示シート

VBA マクロ ブック保護 非表示シート

ツイート原文

プロパティの一番下に、Visibleがありますね。
これを「-1 - xlSheetVisible」に変更しましょう。
タイピング得意なら、Ctrl+Gでイミディエイトを表示して、
for i=1 to sheets.Count:sheets(i).visible=true:next
そして指に魂を込めて「Enter」しましょう。
xlSheetVisibleは長いからtrueでOKです。

VBEの使い方:イミディエイト ウィンドウ
VBE(VisualBasicEditor)は、VBAで使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境です。ここではイミディエイトウィンドウの使い方について説明します。目次 イミディエイトウィンドウの表示 イミディエイトウィンドウの基本的な使い方 値を表示 VBA実行中に変…

追加説明

VBA マクロ ブック保護 非表示シート

Ctrl+Gは、イミディエイト ウィンドウを表示するショートカットです。

VBA マクロ ブック保護 非表示シート

これでシートが表示されれば、これ以降は不要です。


VBA マクロ ブック保護 非表示シート

ツイート原文

プロジェクトにシート名が無いときは、
最初から、Ctrl+Gでイミディエイトを表示して、
for i=1 to sheets.Count:sheets(i).visible=true:next
そして、しっかり指に魂を込めて「Enter」しましょう。
何?、エクセルが怒っている?、実行時エラー?
ちゃんと指に魂をこめましたか?

追加説明

VBAプロジェクトが保護されている場合は、プロジェクト ウィンドウにシート名が表示されません。

VBA マクロ ブック保護 非表示シート

VBAプロジェクトが保護されていても、イミディエイト ウィンドウは表示することができます。
ただし、コピペ(Ctrl+V)は使えなくなっています。
全てタイピングすればそれで構いませんが、コピペしたい場合は一旦新規ブック等の別ブックを表示して、
プロジェクトでその別ブックを選択してからなら、イミディエイト ウィンドウに貼り付けできます。

VBA マクロ ブック保護 非表示シート

イミディエイトに貼り付けしたら、エクセルにいったん戻って、
目的の非表示シートがあるブックをアクティブ(前面に出す)にしてください。
その後に、イミディエイトに入力したものをEnterするようにしてください。

エラーがでる場合は、以下のようなメッセージが出ます。

VBA マクロ ブック保護 非表示シート


VBA マクロ ブック保護 非表示シート

ツイート原文

ここまでの操作でシートが表示できた場合は、
シートのVisibleプロパティがxlSheetVeryHiddenになっているだけの場合です。
表示できずにエラーになった場合は、ブックに保護がかけられています。
当然パスワードが分からなければ保護解除できません。
さて、では諦めるしかないのでしょうか?

追加説明

ブックが保護されておらず、シートのVisibleプロパティがxlSheetVeryHiddenになっているだけの場合なら、
上のイミディエイトのマンドで表示されます。

エラーになるのは、ブックが保護されている場合です。
ブックが保護されている場合は、非表示シートを表示することができません。


VBA マクロ ブック保護 非表示シート

ツイート原文

そもそも非表示となっているシートは、何番目のシートなのか、何という名前のシートなのか…
それにはイミディエイトで、
for i=1 to sheets.Count:?sheets(i).index,sheets(i).name,sheets(i).codename,sheets(i).visible:next
そして、気合いを入れて「Enter」です。

追加説明

VBA マクロ ブック保護 非表示シート

VBEの使い方:イミディエイト ウィンドウ
VBE(VisualBasicEditor)は、VBAで使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境です。ここではイミディエイトウィンドウの使い方について説明します。目次 イミディエイトウィンドウの表示 イミディエイトウィンドウの基本的な使い方 値を表示 VBA実行中に変…


VBA マクロ ブック保護 非表示シート

ツイート原文

表示内容は順に
シート位置,シート名,シートのオブジェクト名,表示
シート名はシートタブに表示されている名称、これは名札に書かれた名前です。
シートのオブジェクト名がいわば本名です。
最後の表示には、-1,0,2の3種類があります。
-1だけが表示されているシートで、0と2は非表示シートです。

追加説明

先のイミディエイトの結果は、



Index Name Codename Visible
シート位置 シート名 オブジェクト名 表示
1 Sheet1 Sheet1 -1
2 Sheet2 Sheet2 2 ・・・非表示
3 Sheet3 Sheet3 -1


VBA マクロ ブック保護 非表示シート

ツイート原文

Sheet.Visibleプロパティは、
-1 :xlSheetVisible
0 :xlSheetHidden
2 :xlSheetVeryHidden
0と2の違いは、
0はユーザー操作で表示に切り替えられる。
2はユーザー操作では表示に切り替えられません。
これで非表示シートは分かりました。
さて、セルの値はどうやって見たら良いでしょうか?

追加説明

先のイミディエイトの結果から、
2番目のシートが非表示シートです。
シート名は、"Sheet2"
オブジェクト名は、"Sheet2"
非表示、2 :xlSheetVeryHidden

第69回.シートの非表示(Visible,Hidden)|VBA入門
ユーザーが操作・閲覧する必要のないシートは非表示にする事で使い易いExcelブックにします。マスタ情報やマクロでのみ使用するデータが入っているシート等、通常は使用者が変更することがなく、見る必要もないのであれば、シート保護をするより非表示にしてしまった方が、ユーザーにとっては使いやすいブックとなります。


VBA マクロ ブック保護 非表示シート

ツイート原文

セルの値をイミディエイトで見るときは、
?sheets("sheet2").range("A1")
EnterでValueが表示されます。
ちょっと長いですね、もっと短く、
?sheet2.range("A1")
さらに短く、
?sheet2.[A1]
この時のsheet2はシートのオブジェクト名(本名)です。
[]はEvaluateの糖衣構文です。

追加説明

VBA マクロ ブック保護 非表示シート

上の例では、Range("A1")に値1が入っている場合です。

Evaluateメソッド(文字列の数式を実行します)
Evaluateメソッドは、Excelで使用する名前をオブジェクトまたは値に変換します。簡単に説明すれば、セルに入れる数式を文字列としてVBAで実行できます。Evaluateメソッドの構文 式.Evaluate(name) 式には以下が指定できます。


VBA マクロ ブック保護 非表示シート

ツイート原文

セルの値を一つ一つ見ていたのでは埒があきません。
シート全体をコピーしちゃいましょう。
イミディエイトで、
sheet2.cells.Copy
これでEnter
エクセルに戻って
Ctrl+N(新規ブック)
Ctrl+V(貼り付け)
これでシート全体を見ることが出来ましたね。

追加説明

これは、この通りの操作でシート全体がコピーされます。
イミディエイトで、
sheet2.cells.Copy
これでEnterするときは、目的の非表示シートがあるブックをアクティブ(前面に出す)にしておいてださい。

新規ブック等の他のブックに移動してから、A1セルを選択してからCtrl+V(貼り付け)します。


VBA マクロ ブック保護 非表示シート

ツイート原文

そもそもセルの値だけを見るのなら、
新規ブックのA1セルで、
=
非表示シートのブックに行って、どのシートでも良いのでA1クリック、すると、
=[Book1.xlsx]Sheet1!$A$1
これを以下のように変更
=[Book1.xlsx]Sheet2!A1
このA1セルをコピーすれば、その範囲のセル値は簡単に見ることができます。

追加説明

VBA マクロ ブック保護 非表示シート

シート名を変更し、$A$1をA1と相対参照に変更します。
このA1セルをドラッグ コピーでも良いし、普通にコピーしても構いません。
セル参照を相対参照にしているので、コピーした先のセルになります。


VBA マクロ ブック保護 非表示シート

ツイート原文

つまりブックが保護されていても、シートが非表示になっていても、その内容は簡単に見ることが出来ます。
非表示シートをそのままにして、取引先に送ってしまったりしないよう、ご注意ください。
必要なシートだけを値貼り付けして送るのが基本です。

追加説明

非表示シートに社外秘の情報が入っていたりすることのないように、
取引先に開示して良いシートだけにして、適宜値貼り付けを行い数式を抜いてください。
そうしてから、取引先に送るようにします。
これが、Excelファイルを送る時の基本になります。



同じテーマ「エクセル雑感」の記事

エクセル関連ツイートNo5
エクセル関連ツイートNo6
エクセル関連で「いいね」の多かったツイート
保護されたブックの非表示シートについて
VBAコーディング規則に関する連ツイ
将棋とプログラミングについて~そこには型がある~
変数を考えることはロジックを考える事
VBA今日のひとこと/VBA今日の教訓 on Twitter
ローカル版エクセルが「Office Scripts」に変わる日
エクセルVBA 段級位 目安
DXってなんだ? ITと何が違うの?


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ