ExcelマクロVBA入門
第125回.Worksheetのイベントプロシージャー

Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
最終更新日:2019-07-31

第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
以上について解説します。

Activate

シートが選択された時に実行されるイベントです。
VBEの「Microsoft Excel Objects」内の各シートに記述します。

VBEの操作
コード表示
VBE画面で、各シートで、コードの表示
または、
各シートをダブルクリックでコード表示します。

プロシージャーの作成
コードウインドウの上部、オブジェクトのコンボより、Worksheetを選択する。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub

Worksheetの規定のイベントとして、自動でWorksheet_SelectionChangeが追加されます。

目的のイベントではないので、オブジェクトのコンボの右の、プロシージャーのコンボよりActivateを選択します。
使用例.
シートが選択されたとき、A1セルに移動する



Private Sub Worksheet_Activate()
  Application.Goto ActiveSheet.Range("A1"), True
End Sub

BeforeDoubleClick

セルをダブルクリックした場合、最初に起動されます。
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

セルを右クリックした場合、最初に起動されます。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Target
右クリックされたセルが、Rangeオブジェクトとして渡されます。
Cancel
Trueを入れると、右クリックがキャンセルされます。

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

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

Change

セルの値が変更された時に起動されます。
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

セルの選択範囲を変更した時に起動されます。
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



同じテーマ「マクロVBA入門」の記事

第122回.Shell関数
第123回.APIについて(Win32API)
第124回.Workbookのイベントプロシージャー
第125回.Worksheetのイベントプロシージャー
第126回.入力規則(Validation)
第127回.他のブックのマクロを実行(Runメソッド)
第128回.マクロをショートカットで起動(OnKeyメソッド)
第129回.レジストリの操作(SaveSetting,GetSetting,GetAllSettings,DeleteSetting)
第130回.テーブル操作の概要(ListObject)
第131回.テーブル操作のVBAコード(ListObject)
第132回.その他のExcel機能(グループ化、重複の削除、オートフィル等)


新着記事NEW ・・・新着記事一覧を見る

Byte配列と文字コード関数について|VBA技術解説(8月20日)
PowerQueryの強力な機能をVBAから利用する方法|VBA技術解説(8月4日)
練習問題31(セル結合を解除して値を埋める)|VBA練習問題(7月30日)
練習問題30(マトリックス→リスト形式)|VBA練習問題(7月25日)
Applicationを省略できるApplicationのメソッド・プロパティ一覧|VBA技術解説(7月22日)
コレクション(Collection)の並べ替え(Sort)に対応するクラス|VBA技術解説(7月20日)
CSVの読み込み方法(ジャグ配列)|VBAサンプル集(7月15日)
その他のExcel機能(グループ化、重複の削除、オートフィル等)|VBA入門(7月14日)
オートフィルタ退避回復クラスを複数シート対応させるVBAクラス|VBA技術解説(7月6日)
オートフィルタを退避回復するVBAクラス|VBA技術解説(7月6日)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.変数とデータ型(Dim)|ExcelマクロVBA入門
6.繰り返し処理(For Next)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.ひらがな⇔カタカナの変換|エクセル基本操作
10.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説



  • >
  • >
  • >
  • Worksheetのイベントプロシージャー

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


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




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