この記事では、Excelのマクロから別のブックのマクロを実行する方法についてご説明します。
【動画】Excelのマクロから別のブックのマクロを実行する実際の動き
本題に入る前に、まずは次のツイートをご覧ください。
あるExcelファイル(のマクロ)から、別のExcelファイルのマクロを呼び出す処理を作ってみました😃
動画では「A.xlsm」から、別のフォルダに置いてある「B.xlsm」ファイルのマクロを呼び出しています😊
処理は、「A.xlsm」で取得したデータを「B.xlsm」に貼り付けています😄#Excel#VBA#マクロ pic.twitter.com/9qijQL14bg
— まさ@Excel、VBA、マクロ(経験年数16年) (@masamasa9785) March 18, 2021
ツイートの動画では、Excelのマクロ(ファイル「A.xlsm」のマクロ)から、別のブックのマクロ(ファイル「B.xlsm」のマクロ)を実行しています。
Excelのマクロから別のブックのマクロを実行する方法
Excelのマクロから別のブックのマクロを実行するには、次の流れの通りにコードを書いていきます。
Application.Runメソッドを使うには、Application.Runメソッドの引数に「Step1で取得した別ブック名」と「Step2で取得したマクロ名」を指定して実行します。
コードの例
呼び出し側の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
コードの解説
まずは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
コードの解説
まずは1行目を見てください。
マクロgetDataSetの引数getValに、ファイル「A.xlsm」から受け取ったデータが格納されています。
4行目で、このファイル「A.xlsm」から受け取ったデータをセルに貼り付けます。
なお、このマクロgetDataSetの処理が完了すると、Excelのマクロ(ファイル「A.xlsm」のマクロ)に処理が移ります(戻ります)。
最後に
本記事では、Excelのマクロから別のブックのマクロを実行する方法についてご説明しました。
別ブックのマクロを呼び出すには、Application.Runメソッドの引数に「別ブック名」と「マクロ名」を指定して実行します。
コードの書き方は少し癖がありますが、先ほどお話した「呼び出し側のExcel(A.xlsm)のマクロのコード」を参考にしていただければと思います。
コードの書き方は特に難しくはないので、是非参考にしてみてくださいね。
プログラミングのスキルを習得するなら
プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。
プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。