【ExcelVBA】Excelのマクロから別のブックのマクロを実行するには

この記事では、Excelのマクロから別のブックのマクロを実行する方法についてご説明します。

【動画】Excelのマクロから別のブックのマクロを実行する実際の動き

本題に入る前に、まずは次のツイートをご覧ください。

ツイートの動画では、Excelのマクロ(ファイル「A.xlsm」のマクロ)から、別のブックのマクロ(ファイル「B.xlsm」のマクロ)を実行しています。

Excelのマクロから別のブックのマクロを実行する方法

Excelのマクロから別のブックのマクロを実行するには、次の流れの通りにコードを書いていきます。

STEP.1
別ブックのファイル名の取得
別のブックのファイル名を取得します。
STEP.2
実行したい別ブックのマクロ名の取得
実行したい別ブックのマクロ名を取得します。
STEP.3
別ブックのマクロを実行する
別ブックのマクロを実行します。実行するには、Application.Runメソッドを使って実行します。
Application.Runメソッドを使うには、Application.Runメソッドの引数に「Step1で取得した別ブック名」と「Step2で取得したマクロ名」を指定して実行します。
Application.Runメソッドとは?
Application.Runメソッドは、外部プログラムを実行するメソッドです。

コードの例

呼び出し側のExcel(A.xlsm)のマクロのコード

    Dim rng As Range
    Dim getVal As Variant
    
    '別ブックのファイル名
    Const filePath As String = "C:\work\B.xlsm"
    
    '別ブックのマクロ名
    Const macroName As String = "mdl_main.getDataSet"
    
    'セルのデータをRangeオブジェクトに取得する
    Set rng = Range("A9:G18")
    
    'Rangeオブジェクトの中身を配列に格納する
    getVal = rng

    '別ブックのマクロを呼び出す
    Application.Run "'" & filePath & "'!" & macroName, getVal
このマクロは何をしている?
このマクロは何をしているのかというと、ファイル「A.xlsm」のセルの値(A9からG18のセルの値)を、ファイル「B.xlsm」に渡そうとしています。

コードの解説

まずは17行目を見てください。

17行目のApplication.Runメソッドで、別のブックのマクロ(ファイル「B.xlsm」のマクロ)を呼び出しています。

Runメソッドには、第1引数に別のブック名とマクロ名(「!」マークでブック名とマクロ名をつなげる)を、第2引数にマクロに渡したい引数を指定します。

ちなみに、別ブックのファイル名は5行目で、実行したい別ブックのマクロ名は8行目で取得しています。

呼び出される側のExcelのマクロのコードも見てみましょう

呼び出される側のExcelのマクロのコードについてもご説明します。

呼び出される側のExcel(B.xlsm)のマクロのコード

Sub getDataSet(ByRef getVal As Variant)
   
    'セルにデータを貼り付ける
    Sheets("data").Range("A1").Resize(UBound(getVal, 1), UBound(getVal, 2)).Value = getVal

End Sub
このマクロは何をしている?
このマクロは何をしているのかというと、ファイル「A.xlsm」から受け取ったデータをセルに貼り付けようとしています。

コードの解説

まずは1行目を見てください。

マクロgetDataSetの引数getValに、ファイル「A.xlsm」から受け取ったデータが格納されています。

4行目で、このファイル「A.xlsm」から受け取ったデータをセルに貼り付けます。

なお、このマクロgetDataSetの処理が完了すると、Excelのマクロ(ファイル「A.xlsm」のマクロ)に処理が移ります(戻ります)。

最後に

本記事では、Excelのマクロから別のブックのマクロを実行する方法についてご説明しました。

別ブックのマクロを呼び出すには、Application.Runメソッドの引数に「別ブック名」と「マクロ名」を指定して実行します。

コードの書き方は少し癖がありますが、先ほどお話した「呼び出し側のExcel(A.xlsm)のマクロのコード」を参考にしていただければと思います。

コードの書き方は特に難しくはないので、是非参考にしてみてくださいね。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら