Excel VBAでは、Excelファイル(ブック)を開いたときにマクロを自動実行できます。
例えば、
- ブックを開いたらメッセージを表示する
- 起動時にデータを自動更新する
- ファイルを開いた日時を記録する
- 起動時に決まったシートを表示する
といった処理を自動化できます。
ブックを開いたときにVBAを自動実行するには、基本的にWorkbook_Openイベントを使用します。最も簡単なコードは次のとおりです。
Private Sub Workbook_Open()
MsgBox "Excelファイルを開きました"
End Sub
Workbook_Openは標準モジュールではなく、ThisWorkbookに記述するのが重要です。この記事では、Excelファイルを開いたときにマクロを自動実行する方法を、VBA初心者向けに画像とサンプルコードを使って説明します。
Excelファイルを開いたときにマクロを自動実行する方法
Excelファイルを開いたときにVBAを自動実行するには、Workbook_Openイベントを使用します。まず、対象となるExcelファイルを開きます。
キーボードから、
Alt + F11
を押して、VBE(Visual Basic Editor)を起動します。
プロジェクトエクスプローラーの、
Microsoft Excel Objects → ThisWorkbook
をダブルクリックします。

ThisWorkbookに次のコードを記述します。
Private Sub Workbook_Open()
MsgBox "Excelファイルを開きました"
End Sub
「Excelファイルを開きました」
というメッセージが自動的に表示されれば成功です。
このように、Workbook_Openの中に処理を書くことで、ユーザーがマクロを手動実行しなくても、ブックを開いたタイミングで処理を実行できます。
Workbook_OpenはThisWorkbookに記述する
ここはVBA初心者が間違えやすいポイントです。
Workbook_Openは、通常のマクロのように「標準モジュール」へ記述するのではなく、ThisWorkbookに記述します。
「Alt + F11」でVBEを開き、
Microsoft Excel Objects → ThisWorkbook
をダブルクリックしてください。

ブックを開く、保存する、閉じるといったブックに関するイベントは、ThisWorkbookに記述します。
一方、特定のワークシートでセルが変更されたときなど、シートに関するイベントは対象シートのモジュールに記述します。
Workbook_Openイベントを作成する
ThisWorkbookを開いたら、コードウィンドウ上部にあるオブジェクトボックスから「Workbook」を選択します。

続いてプロシージャボックスから「Open」を選択すると、
Private Sub Workbook_Open()
End Sub

この中に、Excelファイルを開いたときに実行したい処理を書きます。
Excelを開いたときにメッセージを表示する
簡単な例として、Excelファイルを開いたときにメッセージを表示してみます。
Private Sub Workbook_Open()
MsgBox "Excelファイルを開きました"
End Sub

MsgBoxの部分を別の処理に変更すれば、さまざまな起動時処理を自動化できます。
Excelを開いたときに指定したシートを表示する
ブックを開いたとき、毎回決まったワークシートを表示することもできます。例えば「Sheet4」を表示する場合は次のように記述します。
Private Sub Workbook_Open()
Worksheets("Sheet4").Activate
End Sub

Sheet4の部分は、実際に表示したいシート名に変更してください。
例えば「メニュー」というシートを表示したい場合は、
Worksheets("メニュー").Activate
業務で使用するExcelファイルで、最初にメニュー画面や入力画面を表示したい場合などに便利です。
Workbook_Openから別のマクロを実行する
すでに作成してあるマクロを、Excelファイルを開いたときに自動実行することもできます。
例えば標準モジュールに次のマクロがあるとします。
Sub データ更新()
MsgBox "データを更新します"
End Sub
Workbook_Openから、このマクロを呼び出します。Private Sub Workbook_Open()
Call データ更新
End Sub

Workbook_Openにすべてのコードを書くよりも、標準モジュールに処理を作り、Workbook_Openから呼び出すとコードを管理しやすくなります。Workbook_OpenとAuto_Openの違い
Excelを開いたときにマクロを実行する方法を調べると、
Workbook_Open
のほかに、
Auto_Open
を見かけることがあります。
どちらもブックを開いたときに処理を実行できますが、現在VBAでブックを開いたときのイベント処理を書くのであれば、基本的には**Workbook_Openを使用すると分かりやすい**です。
Workbook_Openはブックのイベントプロシージャなので、ThisWorkbookに記述します。
一方、Auto_Openは標準モジュールに記述します。
初めて「Excelを開いたら自動実行するマクロ」を作る場合は、この記事で紹介しているWorkbook_Openから覚えるとよいでしょう。
Workbook_Openを一時的に実行しない方法
起動時のマクロを一時的に実行したくない場合があります。
その場合は、Shiftキーを押しながらExcelブックを開く方法があります。
起動時に実行するVBAに問題があり、Excelファイルを正常に開けなくなった場合などにも役立ちます。
Workbook_Openが実行されない場合
コードを書いたのに、Excelファイルを開いてもマクロが自動実行されない場合は、次の点を確認してください。
Excelマクロ有効ブック(.xlsm)で保存しているか
VBAを保存する場合は、ファイルをExcelマクロ有効ブック(*.xlsm)として保存します。通常の.xlsx形式ではVBAコードを保存できません。
マクロが無効になっていないか
Excelのセキュリティ設定によってマクロが無効になっている場合、Workbook_Openは実行されません。信頼できるファイルであることを確認したうえで、Excel側のマクロ設定を確認してください。
ThisWorkbookに記述しているか
Workbook_Openを標準モジュールに書いていないか確認してください。
Private Sub Workbook_Open()
End Sub
EnableEventsがFalseになっていないか
イベントが無効になっているとWorkbook_Openなどのイベントが動作しません。何らかのVBA処理で、
Application.EnableEvents = False
必要に応じて、
Application.EnableEvents = True
まとめ
Excelファイル(ブック)を開いたときにマクロを自動実行するには、Workbook_Openイベントを使用します。
基本形は次のコードです。
Private Sub Workbook_Open()
'ブックを開いたときに実行したい処理
End Sub
Workbook_Openを標準モジュールではなくThisWorkbookに記述することです。Workbook_Openを使えば、Excelファイルを開いたときにメッセージを表示したり、指定したシートを表示したり、既存のマクロを自動実行したりできます。
うまく実行されない場合は、.xlsmで保存されているか、マクロが有効になっているか、ThisWorkbookにコードを書いているか、EnableEventsが無効になっていないかを確認してみてください。
