【VBA】モジュール名を指定して、他のモジュールのマクロを呼び出す方法

目次

はじめに

VBAでプロジェクトの規模が大きくなると、機能ごとにコードを別の標準モジュールに分割して管理することが多くなります。その際、異なるモジュール間で、偶然同じ名前のマクロ(プロシージャ)を定義してしまう可能性があります。

このような状況でマクロ名だけで呼び出しを行うと、VBAはどのマクロを実行すればよいか分からず、意図しない方のマクロが実行されたり、エラーが発生したりする原因になります。

この記事では、モジュール名を明記することで、どのモジュールにあるマクロを呼び出すのかをVBAに正確に伝え、安全に他のモジュールのプロシージャを実行する方法を解説します。


モジュール名を指定してマクロを呼び出すサンプルコード

この例では、2つの標準モジュールを作成します。

  1. MainModule: メインの処理を行うモジュール。
  2. StringHelpers: 文字列操作に関する汎用的な関数をまとめた、ライブラリモジュール。

1. ライブラリモジュールを作成

まず、汎用的な関数を格納するモジュールを作成します。モジュールの名前は、プロパティウィンドウで (Name)StringHelpers に変更します。

【標準モジュール: StringHelpers

' 文字列の前後に記号を付加する関数
Public Function AddBrackets(ByVal text As String) As String
    AddBrackets = "【" & text & "】"
End Function

' 簡単なログを出力するプロシージャ
Public Sub PrintLog(ByVal message As String)
    Debug.Print Date & " " & Time & ": " & message
End Sub

2. メインモジュールから呼び出す

次に、MainModule から、先ほど作成した StringHelpers モジュールのプロシージャを、モジュール名を指定して呼び出します。

【標準モジュール: MainModule

' 他のモジュールのプロシージャを呼び出すメイン処理
Sub RunMainProcess()
    Dim formattedText As String
    
    '--- モジュール名を指定して、Subプロシージャを呼び出す ---
    Call StringHelpers.PrintLog("処理を開始します")
    
    '--- モジュール名を指定して、Functionプロシージャを呼び出す ---
    formattedText = StringHelpers.AddBrackets("重要なお知らせ")
    
    MsgBox formattedText
    
    Call StringHelpers.PrintLog("処理を終了します")
End Sub

実行結果

RunMainProcess を実行すると、「【重要なお知らせ】」というメッセージボックスが表示され、イミディエイトウィンドウには以下のようなログが出力されます。

2025/08/17 15:11:46: 処理を開始します
2025/08/17 15:11:46: 処理を終了します

コードの解説

Call StringHelpers.PrintLog(...)

これが、他のモジュールのプロシージャを明示的に呼び出す構文です。

  • StringHelpers.: 呼び出したいプロシージャが属するモジュール名を、プロシージャ名の前に記述し、ドット (.) で繋ぎます。
  • Call: Sub プロシージャを呼び出す際のキーワードです(省略可能ですが、付けると呼び出しであることが明確になります)。

formattedText = StringHelpers.AddBrackets(...)

Function プロシージャを呼び出す際も同様に、モジュール名.関数名 という形式で記述します。


なぜモジュール名を指定するのか?

  • コードの可読性向上: StringHelpers.PrintLog と書かれているだけで、「これは文字列関連のヘルパーモジュールにあるログ出力機能だな」と、コードの意図が格段に読み取りやすくなります。
  • 名前の衝突回避: もし MainModule の中にも PrintLog という名前のプロシージャがあったとしても、StringHelpers.PrintLog と書けば、StringHelpers モジュールの方が確実に呼び出されます。これにより、意図しない動作を防ぎ、マクロの安定性が向上します。

まとめ

今回は、モジュール名を指定して、他の標準モジュールにあるプロシージャを呼び出す方法を解説しました。

  • モジュール名.プロシージャ名 という構文で、呼び出し先を明示できる。
  • これにより、コードの可読性安定性が向上する。

特に、複数のモジュールで構成される大規模なプロジェクトや、チームで開発を行う際には、このように呼び出し元を明確に記述するコーディングスタイルを徹底することをお勧めします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次