VBA入門
Worksheetのイベントプロシージャー

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013-06-07 最終更新日:2021-12-10

第125回.Worksheetのイベントプロシージャー


Worksheetのイベントプロシージャーは、ワークシートまたはそのセルに対し特定の操作(これがイベント)が行われた時に実行されます。
イベントは、手動でもVBAでも、どちらで操作が行われても発生します。


Worksheetのイベントプロシージャーの一覧紹介と主要なイベントについて解説します。

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操作

コード表示

VBE画面のプロジェクトでイベントを追加するシートを選択後、

メニューの「表示」→「コード」
右クリックから「コードの表示」
ダブルクリック

いずれかの操作でコードを表示します。


プロシージャーの作成

コードウインドウの上部、
左側のドロップダウンがオブジェクトの選択で、
右側のドロップダウンがイベントの選択になります。

左側のオブジェクトの選択で「Worksheet」を選択します。

VBA マクロ シーのイベント

VBA マクロ シーのイベント

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

VBA マクロ シーのイベント

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

VBA マクロ シーのイベント

自動で追加された「Worksheet_SelectionChange」が不要であれば消して構いません。


Activate:Worksheetのイベント

シートが選択された時に実行されるイベントです。
手動で開く場合でも、VBAで開く場合でも起動されます。

Private Sub Worksheet_Activate()

使用例
シートが選択されたとき、A1セルに移動する

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を入れると、ダブルクリックがキャンセルされます。
具体的には、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を入れると、右クリックがキャンセルされます。

使用例.
右クリックメニューの変更(CommandBars)

こちらで、右クリックで表示されるメニューの変更をしています。

Change:Worksheetのイベント

セルの値が変更された時に起動されます。
Private Sub Worksheet_Change(ByVal Target As Range)
Target
変更されたセルが、Rangeオブジェクトとして渡されます。

使用例.
A列に、小文字が入力された場合、直ちに大文字に変更する。

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オブジェクトとして渡されます。

使用例.
特定範囲内(A2:D100)の選択行の色を変更します。

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

全てのシートまたは複数のシートに対するイベント

Worksheetのイベントは、記載したシートモジュールに対応するシートに限定されたイベントになります。
複数シートや全てのシートでイベントを捕捉したい場合は、それぞれのシートモジュールに記載する必要が出てきます。
そのような場合は、Workbookのイベント を使用してください。
・Workbookのイベント一覧 ・イベントプロシージャー追加のVBE操作 ・Workbook_Open:Workbookのイベント ・Workbook_BeforeClose:Workbookのイベント ・Workbook_SheetChange: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 ・・・新着記事一覧を見る

ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|VBA入門
4.ひらがな⇔カタカナの変換|エクセル基本操作
5.繰り返し処理(For Next)|VBA入門
6.変数宣言のDimとデータ型|VBA入門
7.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
8.並べ替え(Sort)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.Findメソッド(Find,FindNext,FindPrevious)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。


このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ