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

ExcelマクロVBAとエクセル関数についての私的雑感
最終更新日: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で使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境です。ここではイミディエイトウィンドウの使い方について説明します。イミディエイトウィンドウの表示 メニュー「表示」→「イミディエイトウィンドウ」ショートカット:Ctrl+G 初期設定では、

追加説明

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で使われるコードエディタ、コンパイラ、デバッガ、その他の開発支援ツールが統合された開発環境です。ここではイミディエイトウィンドウの使い方について説明します。イミディエイトウィンドウの表示 メニュー「表示」→「イミディエイトウィンドウ」ショートカット:Ctrl+G 初期設定では、


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ファイルを送る時の基本になります。



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

エクセルで連立方程式を解く(MINVERSE,MMULT)
「VBAで導関数を求めよ」ツイッターのお題をやってみた
ツイッターのお題「君の名は?」
保護されたブックの非表示シートについて
VBAが消えてしまった!マクロが壊れて動かない!
エクセル関連ツイート
エクセル関連ツイートNo2
エクセル関連ツイートNo3
エクセル関連ツイートNo4
エクセル関連ツイートNo5
ツイッターで出されたVBAのお題をやってみた


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

COUNTIF関数の結果は?(ツイッターお題)|エクセル雑感(5月30日)
エクセル&VBA オンライン講座|エクセル セミナー(5月29日)
アルファベットの26進(ツイッターお題)|エクセル雑感(5月19日)
VBAが消えてしまった!マクロが壊れて動かない!|エクセル雑感(5月8日)
時間に関する関数の扱い方(ツイッター投稿)|エクセル雑感(5月6日)
文字列のセルだけ結合(ツイッターのお題)|エクセル雑感(5月5日)
表示形式.言語設定|エクセル入門(5月1日)
GoogleスプレッドシートをExcelにインポートする|VBAサンプル集(4月28日)
ツイッターのお題「CSV編集」|エクセル雑感(4月25日)
プログレスバーを自作する|ユーザーフォーム入門(4月18日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




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


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



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