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

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 ・・・新着記事一覧を見る

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




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


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


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