Excel VBA|ブックを開いたときにマクロを自動実行する方法

スポンサーリンク
この記事は約6分で読めます。

Excel VBAでは、ブックを開いたタイミングで自動的にマクロを実行できます。

この記事では、Workbook_Open イベントを使って、Excelファイルを開いたときに指定したマクロを自動実行する方法を紹介します。

毎回手動でマクロを実行する手間を減らしたい場合や、ファイルを開いた直後に決まった処理を行いたい場合に便利です。

Workbook_Openとは

Workbook_Open は、Excelブックを開いたときに自動で実行されるイベントです。

たとえば、ブックを開いた直後に集計処理を実行したり、CSVを取り込んだり、特定のシートを表示したりできます。

Workbook_OpenはThisWorkbookに記述する

Workbook_Open を使う場合は、通常の標準モジュールではなく、ThisWorkbook にコードを記述します。

標準モジュールに書いても、ブックを開いたときには自動実行されないため注意してください。

  1. Excelを開き、Alt + F11 を押してVBAエディターを開きます。
  2. 左側の「Microsoft Excel Objects」内にある ThisWorkbook をダブルクリックします。
  3. 表示されたコード画面に Workbook_Open の処理を記述します。
注意:
Workbook_Open は、ThisWorkbook に記述します。
標準モジュールに書いただけでは、Excelを開いたときに自動実行されません。

方法①:Callで作成済みのマクロを実行する

すでに MyMacro というマクロを作成している場合は、Workbook_Open の中から Call を使って呼び出せます。

Private Sub Workbook_Open()

    Call MyMacro

End Sub

Call は省略することもできます。

Private Sub Workbook_Open()

    MyMacro

End Sub

同じブック内にあるマクロを実行するだけであれば、この方法が一番シンプルです。

方法②:Application.Runでマクロを実行する

マクロ名を文字列で指定したい場合や、別ブックのマクロを実行したい場合は、Application.Run を使う方法もあります。

Private Sub Workbook_Open()

    Application.Run "Macro1"
    Application.Run "Macro2"
    Application.Run "Macro3"

End Sub

Application.Run を使うと、マクロ名を文字列として扱えるため、実行するマクロを管理しやすくなります。

Application.Runを使うメリット

  • マクロ名を文字列で指定できる。
  • 複数のマクロを順番に実行しやすい。
  • 別ブックのマクロも指定できる。

別ブックのマクロを実行する場合は、次のようにブック名とマクロ名を指定します。

Application.Run "Book1.xlsm!Macro1"

方法③:配列を使って複数のマクロを順番に実行する

実行したいマクロが多い場合は、配列にマクロ名を入れて順番に実行すると管理しやすくなります。

Private Sub Workbook_Open()

    Dim macros As Variant
    Dim i As Long

    macros = Array("Macro1", "Macro2", "Macro3")

    For i = LBound(macros) To UBound(macros)
        Application.Run macros(i)
    Next i

End Sub

この方法なら、実行するマクロを増やしたいときも、Array の中にマクロ名を追加するだけで済みます。

標準モジュールにまとめて処理を書く場合

処理が長くなる場合は、ThisWorkbook にすべての処理を書くのではなく、標準モジュール側に実行用のマクロを作っておくと管理しやすくなります。

まず、標準モジュールに次のようなマクロを作成します。

Sub RunMultipleMacros()

    Call Macro1
    Call Macro2
    Call Macro3

End Sub

そして、ThisWorkbook には次のように書きます。

Private Sub Workbook_Open()

    Call RunMultipleMacros

End Sub

この形にしておくと、ThisWorkbook 側はすっきりし、実際の処理は標準モジュールで管理できます。

マクロ有効ブック(.xlsm)で保存する

Workbook_Open を使う場合は、Excelファイルをマクロ有効ブックとして保存する必要があります。

  1. Ctrl + S を押して保存画面を開きます。
  2. ファイルの種類で Excel マクロ有効ブック(.xlsm) を選択します。
  3. 保存後、Excelをいったん閉じます。
  4. もう一度ファイルを開くと、Workbook_Open が実行されます。
注意:
通常の .xlsx 形式では、マクロを保存できません。
VBAを使う場合は、.xlsm 形式で保存してください。

マクロが自動実行されない場合

コードを書いてもマクロが自動実行されない場合は、次の点を確認してください。

  • Workbook_OpenThisWorkbook に書いているか。
  • ファイルを .xlsm 形式で保存しているか。
  • マクロが無効化されていないか。
  • マクロ名に間違いがないか。
  • 開いたときにエラーが発生して処理が止まっていないか。

マクロのセキュリティ設定を確認する

Excelの設定によっては、マクロがブロックされる場合があります。

その場合は、ファイルの安全性を確認したうえで、必要に応じて「コンテンツの有効化」を行います。

毎回同じフォルダで安全なマクロを使う場合は、Excelの「信頼できる場所」に保存フォルダを追加する方法もあります。

注意:
「すべてのマクロを有効にする」は、危険なマクロも実行される可能性があるため、基本的にはおすすめしません。
信頼できるファイルか確認したうえで、必要な場合だけ有効化してください。

まとめ

Excelを開いたときにマクロを自動実行したい場合は、ThisWorkbookWorkbook_Open を記述します。

同じブック内のマクロを実行するだけなら Call が簡単です。複数のマクロを順番に実行したい場合や、マクロ名を文字列で管理したい場合は Application.Run を使うと便利です。

また、マクロを保存するには .xlsm 形式が必要です。ファイルを開いても実行されない場合は、保存形式、記述場所、セキュリティ設定を確認してください。

にほんブログ村 IT技術ブログ IT技術メモへ

コメント

タイトルとURLをコピーしました