Excelでは、ファイルを開いたタイミングでマクロ(VBA)を自動的に実行できます。
例えば、
- Excelを開いたらメッセージを表示する
- 起動時にデータを更新する
- ファイルを開いた日付を記録する
- 起動時に決まったシートを表示する
といった処理を自動化できます。
Excelファイルを開いたときにVBAを実行する場合は、基本的にWorkbook_Openイベントを使用します。
この記事では、Excelを開いたときにマクロを自動実行する方法を、VBA初心者の方にも分かるようにサンプルコード付きで解説します。
また、Workbook_OpenとAuto_Openの違いや、マクロが自動実行されない場合の確認ポイントについても紹介します。
Excelを開いたときにマクロを自動実行する方法
Excelファイルを開いたときにVBAを自動実行するには、Workbook_Openイベントを使用します。まず、ExcelでVBE(Visual Basic Editor)を開きます。
Alt + F11
を押してください。
VBEが表示されたら、左側のプロジェクトエクスプローラーから、
Microsoft Excel Objects → ThisWorkbook
をダブルクリックします。
ThisWorkbookに次のコードを記述します。
Private Sub Workbook_Open()
MsgBox "Excelファイルを開きました"
End Sub
すると、
Excelファイルを開きました
というメッセージが自動的に表示されます。
つまり、Workbook_Openの中に記述した処理が、Excelファイルを開いたタイミングで実行されます。
Workbook_OpenはThisWorkbookに記述する
Workbook_Openを使用する場合は、コードを「ThisWorkbook」に記述します。
Excelで「Alt+F11」キーを押して、VBE(Visual Basic Editor)を開きます。
プロジェクトウィンドウの「Microsoft Excel Objects」にある「ThisWorkbook」をダブルクリックしてください。

Workbook_Openなど、ブックに関するイベントはThisWorkbookに記述します。特定のシートに関するイベントは、対象となるシートのモジュールに記述します。
Workbook_Openイベントを作成する
▼をクリックし、「Workbook」をクリックします。

プロシージャボックスに「Open」イベントが表示され、コードウィンドウに「Workbook_Open」が作成されます。ここにコードを記述します。

作成されたWorkbook_Openの中に処理を記述すると、Excelファイルを開いたタイミングで自動的に実行されます。
Excelを開いたときにメッセージを表示する
Private Sub Workbook_Open()
MsgBox "Excelファイルを開きました"
End Sub
この例では、ブックを起動すると、メッセージボックスが表示されます。

Excelを開いたときに指定したシートを表示する
Private Sub Workbook_Open()
Worksheets("Sheet4").Activate
End Sub
この例では、ブックを起動すると、Sheet4が開きます。

Sheet4の部分は、実際に表示したいシート名に変更してください。
Workbook_Openを一時的に実行しない方法
Workbook_Openに処理を設定していても、一時的に自動実行したくない場合があります。
その場合は「Shift」キーを押しながらExcelブックを開きます。
Shiftキーを押しながらブックを開くことで、Workbook_Openイベントの実行を回避できます。
起動時に実行するVBAに問題があり、Excelファイルを正常に開けなくなった場合などにも便利です。
Workbook_Openから別のマクロを実行する
「挿入」→「標準モジュール」でModule1を作成します。

Module1:
Sub データ更新()
MsgBox "データを更新します"
End Sub
Private Sub Workbook_Open()
Call データ更新
End Sub
この例では、ブックを起動すると、メッセージボックスが表示されます。

処理が長くなる場合は、Workbook_Openにすべての処理を書くのではなく、標準モジュールに処理を作成してWorkbook_Openから呼び出すと、コードを管理しやすくなります。
Workbook_Openが実行されない場合の確認ポイント
.xlsmで保存しているか
VBAを保存する場合は、
Excelマクロ有効ブック(*.xlsm)
を使用。
マクロが無効になっていないか
信頼できるファイルであることを確認したうえで、Excel側のマクロ設定を確認。
ThisWorkbookに書いているか
Workbook_OpenはThisWorkbookに記述。
EnableEventsがFalseになっていないか
EnableEventsがFalseになっていないかを確認。
Application.EnableEvents = True
まとめ
Excelファイルを開いたときにマクロを自動実行するには、Workbook_Openイベントを使用します。
Workbook_Openは標準モジュールではなく「ThisWorkbook」に記述するのがポイントです。
Workbook_Openを使えば、Excelを開いたときにメッセージを表示したり、指定したシートを表示したり、別のマクロを自動実行したりできます。
Workbook_Openが実行されない場合は、ファイル形式が.xlsmになっているか、マクロが無効になっていないか、ThisWorkbookに記述しているかなどを確認してください。
