エクセルVBAでシートの非表示を行います。Visibleプロパティを利用します。
コード設計をパスワード管理できる様に考えると、実用利便性が大きく上がります。
こんにちは じゅんぱ店長 (@junpa33) です。
エクセルで資料作成をする中、
バックヤードに置いておきたいデータや計算式など、更新作業・メンテナンスで必要でも開示不要な内容が書かれたシートを付随させていることがあります。
そんな時には、シートの非表示化を行いますが、非表示化のレベルによっては利用者側で簡単に非表示解除することが出来てしまいます。
そんな悩ましいシートの非表示化について、VBA記述の基本とパスワード設定管理法について説明して行きます。
- シートの知識
- シートの存在を確認する2種類のコードと実務での例題
- シートクリアーを目的のメソッド別にVBA最速理解
- シートのコピーを最速に理解!VBAコードで異なる結果
- Excelシートを追加・挿入するAddメソッドの使い方
- シートの選択・指定方法とその意味。簡単でも軽視してはダメ
- エクセルシートの名付け・変更と取得そして一覧化するコード
- ワークシートのブック内移動と新規ブックへの移転を分かりやすく
- エクセルシートの並び順が思い通り!シート名一覧で自由自在
- Excelシートを保護する。 記述方法とプロテクトされない操作
- エクセルシートを削除する。Deleteの使い方と注意ポイント
- エクセルシートの非表示コードをパスワード管理するVBA
- ワークシートを変数化する3つの手法 オブジェクト変数など
コンテンツ
エクセルシートの表示・非表示を設定するVBA
エクセルシートの表示と非表示を行うためのVBAコードは至って簡単です。
「見える」という言葉のVBAコード「 Visible 」で「見えます⇒ True 」、「見えません⇒ False 」を指定するだけです。
ノーマルな非表示と表示を行うVBA
これだけです!
ワークシートオブジェクト.Visible = False ・・・非表示にする
ワークシートオブジェクト.Visible = True ・・・表示にする
FalseとTrueについては、「xlSheetHidden (Falseと同意)」と「xlSheetVisible(Trueと同意)」を使うことも出来ます。
作用は全く同じで、ただ文字数が多いだけです。お好みで使ってください(自分は使ってません)。
「ワークシートオブジェクト」で非表示にするシートを指定します。
たとえば「Sheet2」を非表示にします。
Sub シート非表示設定1()
Worksheets("Sheet2").Visible = False
End Sub
このコードを実行すると予定通りこうなります。
では元通りにSheet2を表示したい時はどうすればいいのでしょうか。
非表示にしたシートを再表示させたい時はどうするのか?
表示のVBAコード「Visible = False」を実行する!その通りですが、実務でてっとり早くしたい時はシート上からの右クリックメニューが素早くなります。
これをVBAコードで実行するには、これになります。
Sub シート非表示設定2()
Worksheets("Sheet2").Visible = True
End Sub
非表示するシートの指定方法で重要な注意点があります。
非表示するシート名指定に「Activesheet」を使うとどうなるか?を考えます。
Sub シート非表示設定3()
ActiveSheet.Visible = False
End Sub
この実行コードで「Activesheet」は非表示になります。
では、Activesheet とは何という名前のシートでしたか?
ここでの例題ではそれは「Sheet2」でしょ。ということになりますが、実務では、” Activesheetは〇〇シート ” と完全把握できていることはまずないでしょう。
では、表示するコードでシートを復活させる!ということで、
Sub シート非表示設定4()
ActiveSheet.Visible = True
End Sub
を実行しても、復活表示されることはありません。
もはや、非表示シートは「Activesheet」にはなり得ないからです。
ではどうするか、対策の1つとしては、
別のVBAコードを作成して、そのBOOKにある全シートに対し、表示されていないシートをチェックしていくことになります。
他にもいろいろ方法はありますが、いずれにしても、余計な手間です。
この通常強度でのシートの非表示方法は、だれでも簡単に利用することが出来ます。
別に、VBAコードを利用しなくても、シートタブからの右クリックメニューで ” 1クリックで ” それは出来てしまいます。
また、VBAマクロのみで実行するにしても、シートの非表示VBAと表示VBAの2種類を動かさないといけません。
これでは、エクセル資料作成者から見れば、利用者が重要なバックヤードデータをいくらでも変更してしまい、重要シートのガードにもならないという判断になってしまいます。
防御に対しては、窮屈なBOOKプロテクトやシートプロテクトになってしまうのかということになります。
高強度な非表示を行うVBA
先の項目の通常強度の非表示設定「Visible = False」では、何の役にも立たないと思っている方、向けに高強度の非表示設定方法が存在します。
設定方法については、いずれにしても簡単です。
ワークシートオブジェクト.Visible = xlVeryHidden ・・・非表示にする
ワークシートオブジェクト.Visible = True ・・・表示にする
たとえば、「Sheet2」を以下のVBAコードで高強度非表示にすると
Sub シート非表示設定5()
Worksheets("Sheet2").Visible = xlVeryHidden
End Sub
右クリックメニューからも「再表示」が消滅していて、エクセルシート上からは、復活表示させることは出来ません。
復活させるためには唯一、VBAで再表示コードを実行することになります。
Sub シート非表示設定2()
Worksheets("Sheet2").Visible = True
End Sub
復活表示VBAコードは、先のコードと共通です。
この高強度でのシート非表示も同様に、簡単なVBAコード設定で利用することが出来ます。
また、シートタブからの右クリックメニューで、非表示解除することは出来なくなりました。
エクセル資料作成者の意図するところとしても、利用者が重要なバックヤードデータを変更出来てしまうということは無くなったと思います。
ただしまだ、VBAマクロのみでの実行となる分、シートの非表示VBAと表示VBAの2種類を動かさない問題は解決しません。
非表示解除をパスワードで管理
エクセルシートの非表示マクロと表示マクロをスイッチのON・OFFとするのには違いはないのですが、2つのマクロではなく1つのマクロにまとめてしまうことで、使用の利便性を上げたいと思います。
1つのプロシージャーの中で、「True」と「False」の条件分岐で処理進行を分けて「表示」と「非表示」に導きます。
メッセージボックスで「はい」と「いいえ」だと、誰でも解除出来てしまいますので、パスワードが「合っている」「合っていない」を非表示解除のキーとします。
基本のVBAコードはこのようになります。
非表示にするシート名は事前に設定し、また設定パスワードは「見えない」にしています。
VBAコード起動時に指定したシートが非表示になります。
入力ボックス(InputBox)で入力された文字が一致する場合だけ「再表示」されます。
Sub シート非表示設定6()
Dim PassWD, WORDS As String
Worksheets("sheet2").Visible = xlVeryHidden
PassWD = "見えない"
WORDS = Application.InputBox("パスワードを入力してください。", _
Title:="パスワード", Type:=2)
If WORDS = PassWD Then
Worksheets("sheet2").Visible = True
End If
End Sub
カスタマイズでVBAコードの肉付けして、より実務に合ったものに仕上げてください。
たとえば、アンダーグラウンドの非表示設定したいシート名を「作業シート」とか「下計算」など共通のシート名に(自分で)ルール化しておけば、個人用マクロブックに転記していろんなエクセルBOOKで利用することも出来ます。
まとめ
少しの工夫で簡単単純なものでも、業務で使い勝手の良いものが出来上がったりします。
シート非表示もそういった部類のものです。
基本的な知識でもいろいろVBAの知識を重ねることで、気づけばドンドン出来る事が増えているのを実感すると思います。
知識の組み合わせでVBAを楽しみましょう。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。