他のExcelブックを動的に指定して、マクロを実行する方法

はじめに

今回は、別のExcelブックに格納されているマクロを実行する方法について解説します。

Excelブックを動的に指定できるようにしている点がポイントです。

コードの全体像

Sub マクロを叩く()
    'エクセルを開く
    Dim wb As Workbook
    Set wb = Workbooks.Open(Filename:=ThisWorkbook.Worksheets("Aシート").Range("WB"), ReadOnly:=False)

    Application.Run "'" & wb.Name & "'!Macro1"

    '保存して閉じる
    wb.Save
    wb.Close
End Sub

詳細な解説

1. ワークブックを開く

Dim wb As Workbook
Set wb = Workbooks.Open(Filename:=ThisWorkbook.Worksheets("Aシート").Range("WB"), ReadOnly:=False)
  • ThisWorkbook.Worksheets("Aシート").Range("WB")で、Aシートの「WB」セルに記載されているファイルパスを取得します
    ※「WB」セルは名前の定義で作成しています
  • ReadOnly:=Falseで読み取り専用ではなく編集可能な状態で開きます

2. マクロの実行

Application.Run "'" & wb.Name & "'!Macro1"
  • Application.Runを使用して別ブックのマクロを実行します
  • wb.Nameで開いたブックの名前を取得し、その後ろに!Macro1を付けることでマクロを指定します
  • シングルクォーテーション(')でブック名を囲むことで、ブック名にスペースが含まれていても正しく動作します

3. 後処理

wb.Save
wb.Close
  • マクロ実行後、変更を保存してブックを閉じます
  • これにより不要なブックを開きっぱなしにすることを防ぎます

活用のポイント

  • マクロの格納場所とファイルパスをセルに記載することで、柔軟な運用が可能です
  • 読み取り専用の設定を変更することで、用途に応じた使い分けができます
  • エラー処理を追加することで、より堅牢なコードにすることができます

まとめ

このマクロは、複数のブックを連携させる際の基本的な処理を示しています。

実務で使用する際には、エラー処理やログ出力などを追加することで、より実践的な業務用ツールとして活用できるかと思います。

コメント