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

Excel VBA

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

をダブルクリックします。

Excel VBA VBE

ThisWorkbookに次のコードを記述します。

Private Sub Workbook_Open()

    MsgBox "Excelファイルを開きました"

End Sub
Excelファイルを保存して一度閉じ、もう一度開いてみましょう。
「Excelファイルを開きました」
というメッセージが自動的に表示されれば成功です。

このように、Workbook_Openの中に処理を書くことで、ユーザーがマクロを手動実行しなくても、ブックを開いたタイミングで処理を実行できます。

 

Workbook_OpenはThisWorkbookに記述する

ここはVBA初心者が間違えやすいポイントです。
Workbook_Openは、通常のマクロのように「標準モジュール」へ記述するのではなく、ThisWorkbookに記述します。

「Alt + F11」でVBEを開き、
Microsoft Excel Objects → ThisWorkbook
をダブルクリックしてください。

Excel VBA VBE

ブックを開く、保存する、閉じるといったブックに関するイベントは、ThisWorkbookに記述します。

一方、特定のワークシートでセルが変更されたときなど、シートに関するイベントは対象シートのモジュールに記述します。

Workbook_Openイベントを作成する

ThisWorkbookを開いたら、コードウィンドウ上部にあるオブジェクトボックスから「Workbook」を選択します。

Excel VBA VBE

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

Private Sub Workbook_Open()

End Sub
が自動的に作成されます。
Excel VBA VBE

この中に、Excelファイルを開いたときに実行したい処理を書きます。

Excelを開いたときにメッセージを表示する

簡単な例として、Excelファイルを開いたときにメッセージを表示してみます。

Private Sub Workbook_Open()

    MsgBox "Excelファイルを開きました"

End Sub
ブックを保存して閉じ、もう一度開くとメッセージボックスが表示されます。
メッセージボックス

MsgBoxの部分を別の処理に変更すれば、さまざまな起動時処理を自動化できます。

Excelを開いたときに指定したシートを表示する

ブックを開いたとき、毎回決まったワークシートを表示することもできます。例えば「Sheet4」を表示する場合は次のように記述します。

Private Sub Workbook_Open()
    Worksheets("Sheet4").Activate
End Sub

Excel book

Sheet4の部分は、実際に表示したいシート名に変更してください。
例えば「メニュー」というシートを表示したい場合は、

Worksheets("メニュー").Activate
とします。
業務で使用するExcelファイルで、最初にメニュー画面や入力画面を表示したい場合などに便利です。

Workbook_Openから別のマクロを実行する

すでに作成してあるマクロを、Excelファイルを開いたときに自動実行することもできます。
例えば標準モジュールに次のマクロがあるとします。

Sub データ更新()

    MsgBox "データを更新します"

End Sub
ThisWorkbookのWorkbook_Openから、このマクロを呼び出します。
Private Sub Workbook_Open()

    Call データ更新

End Sub
これでExcelファイルを開いたときに「データ更新」マクロが自動的に実行されます。
処理が長い場合は、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
はThisWorkbookに記述します。

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が無効になっていないかを確認してみてください。

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