shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【VBA】CallとApplication.Runの違いとは?|マクロの呼び出し方法を比較

VBAで「別のマクロを実行する」ための手段に「Call」と「Application.Run」があります。その使い方や特性についてのまとめです。

内容:

 

基本:CallとApplication.Runの役割

比較項目 Call Application.Run
実行対象 同一プロジェクト内のマクロ 任意のマクロ(外部含む)
呼び出し方法 コード上で直接記述 文字列で指定
引数の指定 可能 可能
外部ブック対応 不可 可能
エラー検出 コンパイル時 実行時
補完の有無 あり なし(文字列なので)
動的実行 不可 可能(変数や辞書と組み合わせ可)

 

Call:シンプルで高速な直接呼び出し

「Call」 は、同じプロジェクト内にあるマクロを直接呼び出すための構文です。  
また、 「Call」 自体は省略可能で、単にマクロ名を書くことでも実行できます。

🔸 使用例(Callのあり・なし)
Sub テスト()
    Call メッセージ表示
    'または単に'
    メッセージ表示
End Sub

Sub メッセージ表示()
    MsgBox "こんにちは!"
End Sub
🔸 引数ありの例
Sub テスト()
    Call メッセージ表示("処理が完了しました")
End Sub

Sub メッセージ表示(内容 As String)
    MsgBox 内容
End Sub
🔍 特徴
  • 補完が効く**ため、開発中のミスを防ぎやすい
  • コンパイル時にエラー検出されるので安心
  • 外部ブックのマクロは呼び出せない

Application.Run:動的にマクロを実行!

「Application.Run」は、マクロ名を文字列で指定して実行する構文です。  
外部ブックのマクロも呼び出せるため、柔軟性が高く、動的な実行に向いています。

🔸 外部ブックのマクロを呼び出す
Application.Run "'Book1.xlsm'!Module1.メッセージ表示", "こんにちは"
🔸 セルの値からマクロ名を取得して実行
Dim マクロ名 As String
マクロ名 = Range("A1").Value
Application.Run マクロ名
🔍 特徴
  • マクロ名を文字列で指定できるため、柔軟な設計が可能
  • 外部ブックのマクロも実行可能
    - 存在しないマクロ名を指定すると実行時エラーになる

 🆚 違いをまとめて比較

比較項目 Call Application.Run
実行対象 同一プロジェクト内のマクロ 任意のマクロ(外部含む)
呼び出し方法 コード上で直接記述 文字列で指定
引数の指定 可能 可能
外部ブック対応 不可 可能
エラー検出 コンパイル時 実行時
補完の有無 あり なし(文字列なので)
動的実行 不可 可能(変数や辞書と組み合わせ可)

 

💡 使い分けのヒント
  • 通常のマクロ呼び出し→ 「Call」(または省略)
  • ユーザーの選択やセルの値に応じてマクロを切り替えたい
    → 「Application.Run」
  • 外部ブックのマクロを実行したい→ 「Application.Run」

以上、VBAでCallとApplication.Runの違い、マクロの呼び出し方法を比較でした。