はじめに
日常業務で、複数のExcelファイルを扱っている際に、他のExcelファイルに保存されているマクロを実行したい場面がよくあります。VBAの Runメソッド を使えば、今開いているExcelファイルとは違うExcelファイルにあるマクロを簡単に実行することができます。今回は、VBAのRunメソッドを使って他のExcelファイルのマクロを実行する方法をご紹介します。
VBAのRunメソッドとは?
Runメソッド とは、VBAでExcelマクロをプログラムから実行するためのメソッドです。特に、別のExcelファイルに保存されているVBAマクロを呼び出して実行することができる点が特徴です。これにより、他のExcelファイルで実行する必要のある一連の作業を、1つのExcelファイルから操作可能になります。
Application.Run "ブック名!マクロ名"
- ブック名:実行するマクロが含まれるExcelファイル名(拡張子まで付ける)
- マクロ名:実行したいマクロの名前
VBAで他のExcelファイルのマクロを実行する
他のExcelファイルに保存されているマクロを実行するには、Application.Run メソッドを使用します。Excelファイル名とマクロ名を指定することで、他のExcelファイルにあるマクロを直接呼び出すことができます。今回は、ClickFlow_JP.xlsmのVBAマクロを実行し、B.xlsmにあるVBAマクロを呼び出し、実行したいと思います。

B.xlsmにあるマクロは、マクロ名が「Bファイルマクロ」となっています。実行すると、ポップアップウィンドウで「成功です!」と表示されるものです。
Sub Bファイルマクロ()
MsgBox "成功です!", vbInformation, "通知"
End Sub
それでは、今使っているExcelファイルのマクロブックから、B.xlsmファイルのBファイルマクロを呼び出し、実行してみます。

実践コード
Sub Bファイルのマクロを実行します()
' B.xlsm が開かれている場合
Application.Run "'B.xlsm'!Bファイルマクロ"
End Sub
コードの解説:
- Application.Run メソッドを使って、開いてある別のブック “B.xlsm” にあるマクロ “Bファイルマクロ” を実行しています。
開いてない他のExcelファイルのマクロを実行する
先ほどは、他ブックのB.xlsmを開いたまま、VBAマクロの呼び出しをしましたが、B.xlsmが常に開いているとは限りません。その場合は、閉じているB.xlsmを開くというVBAコードを付け足すことで、B.xlsmにあるVBAマクロを実行することが出来ます。閉じているB.xlsmファイルを開くためには、Workbooks.Openを使用します。
実践コード
Sub Bファイルマクロを実行_閉じている場合()
Dim wb As Workbook
Dim filePath As String
' B.xlsm のファイルパスを指定
filePath = "C:\Users\OWNER\OneDrive\Desktop\B.xlsm"
' B.xlsm を開く
Set wb = Workbooks.Open(filePath)
' マクロ実行
Application.Run "'" & wb.Name & "'!Bファイルマクロ"
' B.xlsm を閉じる(保存はしない)
wb.Close SaveChanges:=False
End Sub


コードの解説:
- Workbooks.Open メソッドで、(filePath)カッコ内の変数に設定された外部のマクロファイルを開きます。 設定された外部のマクロファイルと言うのは次の
- filePath = “C:\Users\OWNER\OneDrive\Desktop\B.xlsm” と記述することで、外部のマクロファイルが置いてあるファイルパスを指定しています。ファイルパスの取得方法は別の投稿記事でご紹介しています。
- Application.Run でB.xlsmに含まれる “Bファイルマクロ” というマクロを実行します。補足ですが、ファイル名は、wb.Name
- 実行後、外部のブックを保存せずに閉じます。
応用編: 引数を渡して他のブックのマクロを実行する
他のブックのマクロに引数を渡して実行することもできます。これにより、マクロに動的なデータを渡して、柔軟な処理を行うことが可能です。
引数を渡して他のブックのマクロを実行する
Sub RunMacroWithArguments()
' 他のブックに引数を渡してマクロを実行
Application.Run "'C:\Users\UserName\Documents\AnotherWorkbook.xlsm'!MacroName", "Argument1", 100
End Sub
コードの解説:
- Application.Run メソッドに続けて、マクロの引数(ここでは “Argument1” と 100)を指定しています。
- この引数は、実行されるマクロで使用されます。
エラー処理: マクロが存在しない場合の対処法
他のブックに指定したマクロが存在しない場合、実行時にエラーが発生することがあります。そこで、エラー処理を導入して安全に実行する方法を見ていきます。
エラー処理を追加したマクロ実行
Sub RunExternalMacroWithErrorHandling()
On Error GoTo ErrorHandler
' 他のブックを開く
Workbooks.Open "C:\Users\UserName\Documents\AnotherWorkbook.xlsm"
' 他のブックのマクロを実行
Application.Run "'AnotherWorkbook.xlsm'!MacroName"
' ブックを閉じる
Workbooks("AnotherWorkbook.xlsm").Close SaveChanges:=False
MsgBox "マクロが正常に実行されました。"
Exit Sub
ErrorHandler:
MsgBox "指定されたマクロが存在しないか、実行できませんでした。"
End Sub
コードの解説:
- On Error GoTo ErrorHandler で、エラーが発生した場合にエラーメッセージを表示し、安全に処理を終了します。
まとめ
Excel VBAの Runメソッド を使うことで、他のブックに保存されているマクロを簡単に実行できます。業務で複数のファイルにまたがる作業を一括で管理する際、この機能は非常に有用です。引数を渡すことも可能で、動的な処理を柔軟に行うことができます。今回紹介したサンプルコードを基に、業務の自動化をさらに進めてください。


コメント