. 【VBA】マクロを実行でSubプロシージャを表示しない(Option Private Module)
【VBA】マクロを実行でSubプロシージャを表示しない(Option Private Module)
【VBA】マクロを実行でSubプロシージャを表示しない(Option Private Module)

【VBA】マクロを実行でSubプロシージャを表示しない(Option Private Module)

2022年3月6日2026年2月23日

マクロを実行

マクロを実行ボタンを押すと、実行可能なSubプロシージャが一覧表示されます。

ただ、人に渡すマクロでは見せたくないSubプロシージャもありますよね。

Sub これは見せたい() Call これは見せたくない End Sub Sub これは見せたくない() 'サブプロシージャ End Sub

例えば、上のように処理をサブプロシージャに分けていると、マクロを実行ボタンを押した時に「これは見せたくない」が表示されてしまいます。

サブプロシージャだけ実行されると危ないですよね

こうした見せたくないプロシージャを非表示にするには2つの方法があります。

今回は、それぞれのメリット・デメリットを比較して紹介します。

1. SubプロシージャにPrivateを付ける

Sub これは見せたい() Call これは見せたくない End Sub Private Sub これは見せたくない() ' サブプロシージャ End Sub

1つ目の方法はサブプロシージャの先頭に「Private」を付けることです。

これを付ければ、マクロを実行ボタンを押してもサブプロシージャは表示されます。

デメリットは、他のモジュールからCallできなくなることです。

Private

例えば、モジュールを2つ作っていて、モジュール1に「これは見せたくない」サブプロシージャがあったとします。

そして、このサブプロシージャを使い回したいなと思ってモジュール2のマクロからCallしようとしても、Privateを付けていると呼び出すことができません。

これがPrivateを付けるデメリットです。

2. Option Private Moduleを付ける

Option Private Module Sub これは見せたい() ' 別のモジュールへ移す Call これは見せたくない End Sub Sub これは見せたくない() ' サブプロシージャ End Sub

もう1つの方法は「Option Private Module」を付ける方法です。(これはモジュールの先頭に書く必要があります)

これを書くとモジュール内のすべてのプロシージャが、マクロを実行ボタンを押しても表示されません。

そのため、上のプログラムを1つのモジュールに入れていると、実行したいプロシージャ「これは見せたい」も表示されなくなります。

これを使う時は、実行したいプロシージャを別のモジュールにしておく必要があります。(Privateと違って、別のモジュールからもCallできます)

複数のモジュールを使ってプロシージャを分けたい場合に便利な機能です。

メリット・デメリットと使い分け

メリットデメリットPrivate対象のSubプロシージャだけ表示されない他のモジュールからCall×Option Private Module他のモジュールからCall〇モジュール全体が表示されないメリット・デメリット

メリット・デメリットをまとめると上の表のようになります。そして、ここから使い分けを考えると次の表のようになります。

モジュールが1つモジュールが複数Private〇×Option Private Module×〇使い分け方

基本的にモジュールが1つであればPrivateを付ける。モジュールが複数であれば「Option Private Module」を付けるという風に覚えておけばOKです。

VBA

Posted by やろまい

📎📎📎📎📎📎📎📎📎📎