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

マクロを実行
マクロを実行

マクロを実行ボタンを押すと、実行可能な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
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が難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
こちらの記事でおすすめのプログラマーを紹介しています

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2022/10/01 13:30:59時点 Amazon調べ-詳細)

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい