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

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



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

ツイッターのお題「君の名は?」
ツイッターのお題「CSV編集」
アルファベットの26進(ツイッターお題)
保護されたブックの非表示シートについて
文字列のセルだけ結合
時間に関する関数の扱い方
COUNTIF関数の結果は?
【超難問】エクセル数式問題
IFステートメントの判定
日付の謎:IsDateとCDate
ツイッター投稿用に文字数と特定文字で区切る


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

多階層フォルダ(ディレクトリ)の作成|VBAサンプル集(7月31日)
VBAのインデントについて|VBA技術解説(7月16日)
「VBA Match関数の限界」についての誤解|エクセル雑感(7月15日)
省略可能なVariant引数の参照不可をラップ関数で利用|VBA技術解説(7月12日)
100桁の正の整数値の足し算|エクセル雑感(7月9日)
LSetとユーザー定義型のコピー(100桁の足し算)|VBA技術解説(7月9日)
Variant仮引数のByRefとByValの挙動違い|エクセル雑感(7月5日)
Variant仮引数にRange.Valueを配列で渡す方法|エクセル雑感(7月5日)
Variantの数値型と文字列型の比較|エクセル雑感(7月1日)
VBAのVariant型について|VBA技術解説(6月30日)


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

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




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


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



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