Excelを開いたときにマクロを自動実行する方法|Workbook_Openの使い方

Excel VBA

Excelでは、ファイルを開いたタイミングでマクロ(VBA)を自動的に実行できます。
例えば、

  • Excelを開いたらメッセージを表示する
  • 起動時にデータを更新する
  • ファイルを開いた日付を記録する
  • 起動時に決まったシートを表示する

といった処理を自動化できます。
Excelファイルを開いたときにVBAを実行する場合は、基本的にWorkbook_Openイベントを使用します。

この記事では、Excelを開いたときにマクロを自動実行する方法を、VBA初心者の方にも分かるようにサンプルコード付きで解説します。

また、Workbook_OpenAuto_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ファイルを保存して閉じ、もう一度開きます。
すると、
Excelファイルを開きました

というメッセージが自動的に表示されます。
つまり、Workbook_Openの中に記述した処理が、Excelファイルを開いたタイミングで実行されます。

Workbook_OpenはThisWorkbookに記述する

Workbook_Openを使用する場合は、コードを「ThisWorkbook」に記述します。
Excelで「Alt+F11」キーを押して、VBE(Visual Basic Editor)を開きます。
プロジェクトウィンドウの「Microsoft Excel Objects」にある「ThisWorkbook」をダブルクリックしてください。

Excel VBA VBE

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

Workbook_Openイベントを作成する

▼をクリックし、「Workbook」をクリックします。

Excel VBA VBE

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

Excel VBA VBE

作成されたWorkbook_Openの中に処理を記述すると、Excelファイルを開いたタイミングで自動的に実行されます。

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

Private Sub Workbook_Open()
    MsgBox "Excelファイルを開きました"
End Sub

この例では、ブックを起動すると、メッセージボックスが表示されます。

メッセージボックス

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

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

この例では、ブックを起動すると、Sheet4が開きます。

Excel book

Sheet4の部分は、実際に表示したいシート名に変更してください。

Workbook_Openを一時的に実行しない方法

Workbook_Openに処理を設定していても、一時的に自動実行したくない場合があります。
その場合は「Shift」キーを押しながらExcelブックを開きます。
Shiftキーを押しながらブックを開くことで、Workbook_Openイベントの実行を回避できます。
起動時に実行するVBAに問題があり、Excelファイルを正常に開けなくなった場合などにも便利です。

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

「挿入」→「標準モジュール」でModule1を作成します。

Module1:

Sub データ更新()

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

End Sub
ThisWorkbook:
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に記述しているかなどを確認してください。

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