エクセルシートの非表示コードをパスワード管理するVBA

vbasheethideeyecatch

エクセルVBAでシートの非表示を行います。Visibleプロパティを利用します。
コード設計をパスワード管理できる様に考えると、実用利便性が大きく上がります。

こんにちは じゅんぱ店長 (@junpa33) です。

エクセルで資料作成をする中、

バックヤードに置いておきたいデータや計算式など、更新作業・メンテナンスで必要でも開示不要な内容が書かれたシートを付随させていることがあります。

そんな時には、シートの非表示化を行いますが、非表示化のレベルによっては利用者側で簡単に非表示解除することが出来てしまいます。

そんな悩ましいシートの非表示化について、VBA記述の基本とパスワード設定管理法について説明して行きます。

エクセルシートの表示・非表示を設定するVBA

エクセルシートの表示と非表示を行うためのVBAコードは至って簡単です。

「見える」という言葉のVBAコード「 Visible 」で「見えます⇒ True 」、「見えません⇒ False 」を指定するだけです。

ノーマルな非表示と表示を行うVBA

これだけです!

表示と非表示のVBA構文(通常強度)

ワークシートオブジェクト.Visible = False ・・・非表示にする

ワークシートオブジェクト.Visible = True  ・・・表示にする

FalseとTrueについては、「xlSheetHidden (Falseと同意)」と「xlSheetVisible(Trueと同意)」を使うことも出来ます。

作用は全く同じで、ただ文字数が多いだけです。お好みで使ってください(自分は使ってません)。

「ワークシートオブジェクト」で非表示にするシートを指定します。

たとえば「Sheet2」を非表示にします。

シート「Sheet2」を非表示にします

VBA
Sub シート非表示設定1()
        Worksheets("Sheet2").Visible = False
End Sub

このコードを実行すると予定通りこうなります。

Sheet2非表示実行

では元通りにSheet2を表示したい時はどうすればいいのでしょうか。

シート「Sheet2」を再表示します

非表示にしたシートを再表示させたい時はどうするのか?

表示のVBAコード「Visible = False」を実行する!その通りですが、実務でてっとり早くしたい時はシート上からの右クリックメニューが素早くなります。

右クリックメニュー「再表示」

VBAコードで実行するには、これになります。

VBA
Sub シート非表示設定2()
        Worksheets("Sheet2").Visible = True
End Sub

非表示するシートの指定方法で重要な注意点があります。

賢者は、シート名「 Activesheet 」を使わない!

非表示するシート名指定に「Activesheet」を使うとどうなるか?を考えます。

VBA
Sub シート非表示設定3()
        ActiveSheet.Visible = False
End Sub

この実行コードで「Activesheet」は非表示になります。

では、Activesheet とは何という名前のシートでしたか?

ここでの例題ではそれは「Sheet2」でしょ。ということになりますが、実務では、” Activesheetは〇〇シート ” と完全把握できていることはまずないでしょう。

では、表示するコードでシートを復活させる!ということで、

VBA
Sub シート非表示設定4()
        ActiveSheet.Visible = True
End Sub

を実行しても、復活表示されることはありません。

もはや、非表示シートは「Activesheet」にはなり得ないからです。

ではどうするか、対策の1つとしては、

別のVBAコードを作成して、そのBOOKにある全シートに対し、表示されていないシートをチェックしていくことになります。

他にもいろいろ方法はありますが、いずれにしても、余計な手間です。

通常強度でのシート非表示の使い道と利用価値

この通常強度でシートの非表示方法は、だれでも簡単に利用することが出来ます。

別に、VBAコードを利用しなくても、シートタブからの右クリックメニューで ” 1クリックで ” それは出来てしまいます。

また、VBAマクロのみで実行するにしても、シートの非表示VBAと表示VBAの2種類を動かさないといけません。

これでは、エクセル資料作成者から見れば、利用者が重要なバックヤードデータをいくらでも変更してしまい、重要シートのガードにもならないという判断になってしまいます。

防御に対しては、窮屈なBOOKプロテクトやシートプロテクトになってしまうのかということになります。

高強度な非表示を行うVBA

先の項目の通常強度の非表示設定「Visible = False」では、何の役にも立たないと思っている方、向けに高強度の非表示設定方法が存在します。

設定方法については、いずれにしても簡単です。

高強度非表示のVBA構文

ワークシートオブジェクト.Visible = xlVeryHidden ・・・非表示にする

ワークシートオブジェクト.Visible = True  ・・・表示にする

たとえば、「Sheet2」を以下のVBAコードで高強度非表示にすると

VBA
Sub シート非表示設定5()
        Worksheets("Sheet2").Visible = xlVeryHidden
End Sub
高強度の非表示

右クリックメニューからも「再表示」が消滅していて、エクセルシート上からは、復活表示させることは出来ません。

復活させるためには唯一、VBAで再表示コードを実行することになります。

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)で入力された文字が一致する場合だけ「再表示」されます。

VBA
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を独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です


今回の記事はここまでです。   最後までご覧いただき有難うございました。

「エクセルVBA最速理解」の記事一覧を開く

「エクセルVBA業務ツール」の記事一覧を開く

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。