みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、ExcelVBAのテクニックを紹介・解説いたします。
今回紹介するものは、「Workbook_Openイベント」です。
ExcelVBAでは、Excelの操作を起因として「イベント」を発生させられます。
イベントがどんなものか理解するための入り口として、Workbook_Openイベントは最も理解しやすいと思います。
イベントを理解できるとプロシージャだけでは作れなかったインタラクティブ(対話的)なマクロが作れるようになりますよ。
【目次】
それでは、始めましょう!
ExcelVBAのイベントについて
まずは、ExcelVBAの「イベント」がどのようなものか解説いたします。
イベントとは、ユーザーの操作やオブジェクトの変更を起因とし、VBAが連動して処理を行う機能です。
イベントの一例を挙げると、以下のようなものがあります。
・ワークブックが開かれたときのイベント
・ワークブックが保存される前、保存された後のイベント
・セルの値が変更されたときのイベント
マクロを動かすためには、ワークシート上にボタンを配置したり、Alt+F8キーから実行させたりしますが、イベントはそれらの操作をしなくても、自動的に発生させられます。
つまり、イベントが設定してあればユーザーはマクロのことを意識することなくマクロを動かすことができる、ということです。
上手く使えば非常に便利な機能ですが、マクロ作成者は適切なイベントが発生するよう設定しなければならないので、イベントの動作検証は必須となります。
Workbook_Openイベントとは
これは読んだとおり、「ワークブックが開かれたときに発生するイベント」になります。
Workbook_Openイベントのよくある用途としては以下のようなものがあります。
・メッセージをポップアップ表示する
・特定のワークシートを選択した状態にする
・入力セルの値をクリアする
ワークブックを利用する環境を整えたり、使う前の注意事項を表示したりといった使われ方が多いです。
補足ですが、Workbook_Openイベントは「Workbookイベント」というカテゴリの一つです。
他にもWorkbookイベントはありますので、今後紹介していきます。
Workbook_Openイベントの設定
まず、プロジェクトエクスプローラから「ThisWorkbook」をダブルクリックします。
すると、「〇〇〇.xlsm - ThisWorkbook(コード)」というコードウインドウが開きます。
Workbook_Openを含め、Workbookイベントはこのウインドウに設定しなければなりません。
続いて、「(General)」と表示されているドロップダウンリストから「Workbook」をクリックします。
この操作で、「Private Sub Workbook_Open」というプロシージャが追加されます。
これがWorkbook_Openイベントです。
Subが付いていることからわかるように、Workbook_OpenイベントはSubプロシージャの一種としてVBAで解釈されます。
Workbook_Openイベントで実行させたい処理は、Subプロシージャと同じように記述していきます。
Workbook_Openイベントの使用例
例① メッセージを表示する
ワークブックを利用する前の注意事項を表示したり、「ようこそ」などのメッセージを表示します。
ここでは、Excelのユーザー名を表示するApplication.UserNameを使用しています。
Private Sub Workbook_Open() MsgBox "ようこそ、" + Application.UserName + "さん!" + vbNewLine + _ "このメッセージはWorkbook_Openが出力しています。" End Sub
イベントの動作確認をするために、一度Excelブックを保存して閉じ、再度開いてください。
「セキュリティの警告」が表示されたら[マクロの有効化]をクリックします。
すると、Workbook_Openイベントが動作し、メッセージが表示されます。
使用例② ワークシートの選択
ワークブックを前回保存したときにどのシートが選択されていても、次に開いたときは特定のシートを選択します。
Private Sub Workbook_Open() Worksheets(1).Activate End Sub
Sheet3を選択したままファイルを保存して閉じても、再度開いたときには左端のシート(Sheet1)が自動的に選択されます。
使用例③ セルに値を入力する
ワークブックを開いたとき、前回の入力値をクリアして、新しい値を入力します。
Private Sub Workbook_Open() Worksheets(1).Activate '左端のシートを選択 Cells(1, 2).Value = Date 'B1に当日日付入力 Cells(2, 2).ClearContents 'B2の入力値をクリア Cells(3, 2).ClearContents 'B3の入力値をクリア End Sub
ワークブックを開いたとき、作業日付(B1)にはDate関数で当日日付を、作業者(B2)と作業状況(B3)の前回保存時の値はクリアした状態にします。
使用例④ プロシージャを呼び出す
ワークブックを開いたとき、別のプロシージャを呼び出すこともできます。
ワークシートの初期化を行うプロシージャを標準モジュールに定義しておき、Callステートメントで呼び出す、といった使い方をするならこれです。
Private Sub Workbook_Open() Call ExcelVBA008 End Sub
終わりに
対話的に動くマクロを作るなら、イベントを活用しましょう。
イベントが作れるようになると、Subプロシージャでは対応できない要件にも対応できるようになります。
今回のWorkbook_Openイベント以外にも、ExcelVBAには多くのイベントがありますので、今後紹介していきます。
それでは、また次回お会いしましょう!