ワークブックイベントプロシージャの基本
VBAでワークブックのイベントプロシージャを使用する基本的な方法について説明します。
① ワークブックイベントプロシージャとは何か
ワークブックのイベントプロシージャとは、ワークブックに対して特定の操作が行われた際に自動的に実行されるプロシージャです。これには「ワークブックを開いた時」、「ワークブックを保存した時」などのイベントが含まれます。これらはVBAを使って自動化されたタスクを実行する際に便利です。
② イベントプロシージャ追加のVBE操作
イベントプロシージャを追加するには、まずVBAエディタ(VBE)で対象のワークブックを選択します。その後、「表示」メニューから「コード」を選択し、左側のドロップダウンリストから「Workbook」を選択します。
③ プロシージャの作成方法
イベントプロシージャを作成するには、VBE内で右側のドロップダウンリストから特定のイベントを選択します。イベントを選択すると、そのイベントに対応するプロシージャのテンプレートが自動的に生成され、その中に必要なコードを記述します。
④ 代表的なワークブックイベントの例
代表的なワークブックイベントには、「Workbook_Open」(ワークブックを開いた時に発生)、「Workbook_BeforeClose」(ワークブックを閉じる前に発生)などがあります。これらのイベントは、ワークブックの使用状況に応じて特定のコードを実行するのに適しています。
代表的なワークブックイベントプロシージャ
代表的なワークブックイベントプロシージャとその使用方法について説明します。
① Workbook_Open: ワークブックを開いた時に発生
「Workbook_Open」イベントは、ワークブックが開かれた時に自動的に実行されます。例えば、特定のシートを表示する、初期設定を行うなどのタスクを自動化するのに使用できます。
② Workbook_BeforeClose: ワークブックを閉じる前に発生
「Workbook_BeforeClose」イベントは、ワークブックが閉じられる直前に実行されます。このイベントは、保存の確認、データのクリーンアップ、リソースの解放などの処理を行うのに適しています。
③ Workbook_SheetChange: シートのセルが変更されたときに発生
「Workbook_SheetChange」イベントは、ワークシート内の任意のセルが変更された時に発生します。このイベントは、データの検証、変更のログ記録、条件に基づいた特定のアクションのトリガーとして使用できます。
④ Workbook_WindowActivate: ワークブックウィンドウがアクティブになった時に発生
「Workbook_WindowActivate」イベントは、ワークブックのウィンドウがアクティブになった時に実行されます。このイベントは、ワークブックのフォーカスが変わった時に特定の処理を行うために使うことができます。例えば、特定のシートを表示したり、ユーザーに情報を提供したりするのに使用できます。
ワークブックイベントの具体的な使用例
ワークブックイベントを実際に使用する際の具体例を紹介します。
① ワークブック開いた時に特定のシートへ移動する
ワークブックが開かれた際に特定のシートに自動的に移動するには、「Workbook_Open」イベント内で Worksheets("シート名").Activate
のように記述します。これにより、ワークブックが開かれたときにユーザーを指定したシートに案内できます。
② ワークブックを閉じる前に未保存の場合は保存する
ワークブックを閉じる前に未保存の変更がある場合は、「Workbook_BeforeClose」イベントを使用して、変更が保存されていない場合に保存するように促すことができます。これには、If ThisWorkbook.Saved = False Then ThisWorkbook.Save
のように記述します。
③ ワークシートのセルが変更された時にアラートを表示する
セルが変更された際に警告や通知を表示するには、「Workbook_SheetChange」イベントを使用します。例えば、特定の範囲のセルが変更された時にメッセージボックスを表示するには、If Not Intersect(Target, Range("A1:A10")) Is Nothing Then MsgBox "変更されました"
のように記述します。
④ ワークブックウィンドウのサイズ変更時に行う処理
ワークブックのウィンドウサイズが変更されたときに特定の処理を実行するには、「Workbook_WindowResize」イベントを使用します。例えば、ウィンドウサイズが特定のサイズになったときに特定のシートを表示するように設定できます。
ワークブックのイベントプロシージャの使い方
サンプルコード
ワークブックが開かれたときに実行されるイベントプロシージャ
このコードは、ワークブックが開かれると自動的に実行されます。例えば、開いたときにメッセージボックスを表示するなどの処理を行います。
Private Sub Workbook_Open()
MsgBox "ワークブックが開かれました。"
End Sub
ワークブックを閉じる前に実行されるイベントプロシージャ
このコードは、ワークブックを閉じる前に実行されます。例えば、ユーザーに保存を促すメッセージを表示するなどの処理を行います。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("変更を保存しますか?", vbYesNo) = vbYes Then
ThisWorkbook.Save
End If
End Sub
ワークブックの特定のシートが選択されたときに実行されるイベントプロシージャ
このコードは、特定のシートが選択されたときに実行されます。例えば、特定のシートに移動した際に特定の処理を行うなどの用途に使用できます。
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "特定のシート名" Then
MsgBox "特定のシートが選択されました。"
End If
End Sub