イベントによって自動的に実行されるプロシージャ
イベントプロシージャ 01回
イベントプロシージャーというマクロ
このサイトで紹介してきたVBAのマクロプログラムは、ほとんどが基本的にユーザが意識的に呼び出して、実行させる形式のものでした。
イベントプロシージャーと呼ばれるタイプのVBAプログラムは、あらかじめ設定した特定のタイミング(このタイミングはイベントと呼ばれるものです)で
自動的に実行される形式のプログラムです。
自動的に実行されてしまうと言うのは、マクロのウィルスなどを連想すると少し怖い気もします。
ですが使ってみると非常に便利だということが分かるでしょう。つまり自分が作成したマクロをイベントで実行するのなら、何の問題もないということです。そこでイベントの内容を理解し安全であることを充分実感した上で使ってみると言うのが良いのではないでしょうか。
イベントプロシージャーの基礎知識
1. まず初めにイベントプロシージャーの基礎知識を勉強しましょう。
まずイベントによって自動的に実行されるプロシージャについての概要とイベントプロシージャを記述する方法について説明します。
イベントとはブックやシートといったExcelのオブジェクトに対して特定の操作をした場合に発生するものです。イベントを受け取ることができるオブジェクトの側では専用のコードウインドウにイベント発生時に実行されるプログラムを記述しておきます。
2. Visual Basic Editorを開いたら、プロジェクトエクスプローラーから、ここではSheet1にイベントプロシージャ(イベントのマクロ)を記述したいので、ダブルクリックするか、右クリックからコードの表示でコード画面を表示させます。
3. すると、このようなコード画面が表示されます。これはSheet1のコード画面です。
左上のブルーのワクで囲った部分は、オブジェクトボックスといい、右上の赤いワクで囲った部分は、プロシージャボックスといいます。
4.今までのマクロではコードは基本的に標準モジュールに記述するものでした。
イベントによって実行されるマクロは、各オブジェクトの専用コードモジュールに記述します。
最初から受け入れる器があると思ってください。そしてそのオブジェクトに対して発生した、何らかの操作や事態に応じて、自動的に実行されます。
では、左のオブジェクトボックスの三角をクリックして、どのオブジェクトを対象にするか決めましょう。
オブジェクトはWorksheetしかありません。
Worksheetのイベント
5. Sheet1のオブジェクトはWorksheetしかなく、デフォルトのイベントプロシージャは、Worksheet_SelectionChange(ByVal Target As Range)というプロシージャです。これは自動的にコードウィンドーに挿入されます。使わない場合は、デフォルトのコードは削除してかまいません。
6.そしてWorksheetに対応するプロシージャの一覧を見てみましょう。右側のプロシージャボックスをクリックすると一覧が表示されます。使いたいプロシージャをここから選ぶようになっています。
Worksheetのイベント一覧
Activate | シートがアクティブになった直後 |
---|---|
BeforeDoubleClick | セルがダブルクリックされた瞬間 |
BeforeRightClick | セルが右クリックされた瞬間 |
BeforeDelete | シートが削除される直前 |
Calculate | シートが再計算された直後 |
Change | セルが変更された直後 |
Deactivate | シートがアクティブでなくなった直後 |
FollowHyperlink | ハイパーリンクが区チックされた直後 |
PivotTableAfterValueChange | ピボットテーブル内のせルが編集された直後 |
PivotTableBeforeAllocateChanges | ピポットテーブルに変更が適用される直前 |
PivotTableBeforeCommitChanges | ピポットテーブルの変更がコミッ卜される直前 |
PivotTableBeforeDiscardChanges | ピポットテーブルの変更が繊楽される直前 |
PivotTableChangeSync | ピポットテーブルが変更された直後 |
PivotTableUpdate | ピポットテーブルが更新された直後 |
SelectionChange | 選択範囲が変更された直後 |
LensGalleryRenderComplete | クイック分析のー売が表示された直後 |
TableUpdate | PowerPivotクエリテーブルが更新された直後 |
7.自動でデフォルトのSelectionChangeが追加されましたが、その間に実行する処理のコードを書きます。 間に Target.Interior.ColorIndex = 18 などと書くと移動したセルの背景色が変更になります。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '実行されるコード End Sub