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の違い、マクロの呼び出し方法を比較でした。