第125回.Worksheetのイベントプロシージャー
Worksheetのイベントプロシージャーは、ワークシートまたはそのセルに対し特定の操作(これがイベント)が行われた時に実行されます。
イベントは、手動でもVBAでも、どちらで操作が行われても発生します。
Worksheetのイベントプロシージャーの一覧紹介と主要なイベントについて解説します。
Worksheetのイベント
イベント | 発生条件等 |
Activate | ブック、ワークシート、グラフ シート、または埋め込みグラフがアクティブになったときに発生します。 |
BeforeDoubleClick | 既定のダブルクリックの操作の前に、ワークシートをダブルクリックしたときに発生します。 |
BeforeRightClick | 既定の右クリックの操作の前に、ワークシートを右クリックしたときに発生します。 |
Calculate | ワークシートを再計算した後に Worksheet オブジェクトで発生します。 |
Change | ワークシートのセルがユーザーまたは外部リンクにより変更されたときに発生します。 |
Deactivate | グラフ、ワークシート、またはブックが非アクティブになったときに発生します。 |
FollowHyperlink | ワークシートのハイパーリンクをクリックすると発生します。アプリケーション レベルおよびブック レベルでのイベントについては、SheetFollowHyperlink イベントおよび SheetFollowHyperlink Event イベントのヘルプ トピックを参照してください。 |
PivotTableAfterValueChange | ピボットテーブル内のセルまたはセル範囲が編集または再計算された後に発生します (数式を含むセルの場合)。 |
PivotTableBeforeAllocateChanges | ピボットテーブルに変更が適用される前に発生します。 |
PivotTableBeforeCommitChanges | ピボットテーブルの OLAP データ ソースに対する変更が適用される前に発生します。 |
PivotTableBeforeDiscardChanges | ピボットテーブルに対する変更が破棄される前に発生します。 |
PivotTableChangeSync | ピボットテーブルが変更された後に発生します。 |
PivotTableUpdate | ピボットテーブル レポートがワークシート上で更新された後で発生します。 |
SelectionChange | ワークシートで選択範囲を変更したときに発生します。 |
BeforeDelete | ワークシートが削除される前に発生します。 ※Excel2013以降 |
LensGalleryRenderComplete | 引き出し線ギャラリーのアイコン (動的および静的) の表示が完了したときに発生します。 ※Excel2013以降 |
TableUpdate | データモデルに接続されたクエリテーブルがワークシートで更新された後に発生します。 ※Excel2013以降 |
Worksheetのイベントで代表的な、
Activate
BeforeDoubleClick
BeforeRightClick
Change
SelectionChange
以上について解説します。
イベントプロシージャー追加のVBE操作
・メニューの「表示」→「コード」
・右クリックから「コードの表示」
・ダブルクリック
いずれかの操作でコードを表示します。
左側のドロップダウンがオブジェクトの選択で、
右側のドロップダウンがイベントの選択になります。


オブジェクトにより既定のイベントは違いますので、目的のイベント以外が挿入された場合は、
右側のイベントのドロップダウンから目的のイベントを選択してください。

引数が必要な場合はその引数も含めて自動的にイベントプロシージャーが追加されます。

Activate:Worksheetのイベント
手動で開く場合も、VBAで開く場合でも起動されます。
Private Sub Worksheet_Activate()
Private Sub Worksheet_Activate()
Application.Goto ActiveSheet.Range("A1"), True
End Sub
BeforeDoubleClick:Worksheetのイベント
手動で開く場合も、VBAで開く場合でも起動されます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target
ダブルクリックされたセルが、Rangeオブジェクトとして渡されます。
Cancel
Trueを入れると、ダブルクリックがキャンセルされます。
具体的には、ダブルクリックでセルの編集状態になるのを防ぐことが出来ます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub
上記の例では、ダブルクリックによって、列幅・行高が調整された後、
通常のダブルクリックであるセル編集状態となります。
セル編集状態にしたくない場合は、
Cancel = True
この記述を入れます。
BeforeRightClick:Worksheetのイベント
手動で開く場合も、VBAで開く場合でも起動されます。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Target
右クリックされたセルが、Rangeオブジェクトとして渡されます。
Cancel
Trueを入れると、右クリックがキャンセルされます。
Change:Worksheetのイベント
Private Sub Worksheet_Change(ByVal Target As Range)
Target
変更されたセルが、Rangeオブジェクトとして渡されます。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRng As Range
Application.EnableEvents = False
For Each myRng In Target
If Not Intersect(myRng, Columns("A")) Is Nothing Then
myRng.Value = UCase(myRng.Value)
End If
Next
Application.EnableEvents = True
End Sub
Application.EnableEvents = False
これで、新たなイベント発生を抑止しています。
このがないと、VBAでセル値を変更しても、新たにWorksheet_Changeが実行されてしまいます。
結果的に、イベントの連鎖が起こり、エラーとなります。
Application.EnableEvents = True
これで、新たなイベント発生が発生するようにしています。
これを入れ忘れると、プロシージャー終了後も、新たなイベントが発生しないままになります。
SelectionChange:Worksheetのイベント
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target
選択されたセルが、Rangeオブジェクトとして渡されます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim myRng As Range
Set myRng = Range("A2:D100")
myRng.Interior.ColorIndex = xlNone
If Not Intersect(myRng, Target(1)) Is Nothing Then
Cells(Target(1).Row, myRng(1).Column).Resize(, 5).Interior.Color = RGB(150, 200, 255)
End If
End Sub
全てのシートまたは複数のシートに対するイベント
複数シートや全てのシートでイベントを捕捉したい場合は、それぞれのシートモジュールに記載する必要が出てきます。
そのような場合は、Workbookのイベント を使用してください。
Workbookのイベントは全てのシートが対象となり、引数にイベントが発生したシートオブジェクトが入ってきます。
適宜、対象シートを判定することで、特定の複数シートの処理にも対応が可能となります。
同じテーマ「マクロVBA入門」の記事
第122回.Shell関数
第123回.APIについて(Win32API)
第124回.Workbookのイベントプロシージャー
第125回.Worksheetのイベントプロシージャー
第130回.テーブル操作の概要(ListObject)
第131回.テーブル操作のVBAコード(ListObject,DataBodyRange)
第142回.テーブル全件処理とデータ最終行(ListObject,DataBodyRange)
第127回.他のブックのマクロを実行(Runメソッド)
第128回.マクロをショートカットで起動(OnKeyメソッド)
第129回.レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)
第133回.引数の数を可変にできるパラメーター配列(ParamArray)
新着記事NEW ・・・新着記事一覧を見る
VBA100本ノック 61本目:「ふりがな」の取得と設定|VBA練習問題(1月6日)
VBA100本ノック 60本目:「株式会社」の表記ゆれ置換|VBA練習問題(1月5日)
VBA100本ノック 59本目:12ヶ月分のシートを四半期で分割|VBA練習問題(1月4日)
Select Caseでの短絡評価(ショートサーキット)の使い方|VBA技術解説(1月3日)
VBA100本ノック 迷宮編:巡回セル問題|VBA練習問題(12月31日)
VBA100本ノック 58本目:番号リストを簡潔にした文字列で返す|VBA練習問題(12月30日)
VBA100本ノック 57本目:ファイルの更新日時|VBA練習問題(12月29日)
VBA100本ノック 56本目:数式内の自身のシート名を消す|VBA練習問題(12月28日)
VBA100本ノック 55本目:他ブックのマクロを起動|VBA練習問題(12月26日)
VBA100本ノック 54本目:シートのChangeイベント|VBA練習問題(12月25日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.繰り返し処理(Do Loop)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。