このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

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

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

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

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

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

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

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

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

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

VBAが難しいと感じたら
ココナラにてマクロ(VBA)の作成代行を始めました。
ご依頼はこちらから

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

Posted by やろまい