ExcelマクロVBA入門 | 第125回.Worksheetのイベントプロシージャー | Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説



最終更新日:2013-09-04

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


Worksheetのイベントプロシージャーは、ワークシートまたはそのセルに対し特定の操作(これがイベント)を行った時に実行されます。

イベントは、手動・VBAどちらで操作が行われても発生します。


Worksheetのイベントプロシージャーには以下があります。

Activate ブック、ワークシート、グラフ シート、または埋め込みグラフがアクティブになったときに発生します。
BeforeDoubleClick 既定のダブルクリックの操作の前に、ワークシートをダブルクリックしたときに発生します。
BeforeRightClick 既定の右クリックの操作の前に、ワークシートを右クリックしたときに発生します。
Calculate ワークシートを再計算した後に Worksheet オブジェクトで発生します。
Change ワークシートのセルがユーザーまたは外部リンクにより変更されたときに発生します。
Deactivate グラフ、ワークシート、またはブックが非アクティブになったときに発生します。
FollowHyperlink ワークシートのハイパーリンクをクリックすると発生します。アプリケーション レベルおよびブック レベルでのイベントについては、SheetFollowHyperlink イベントおよび SheetFollowHyperlink Event イベントのヘルプ トピックを参照してください。
PivotTableAfterValueChange ピボットテーブル内のセルまたはセル範囲が編集または再計算された後に発生します (数式を含むセルの場合)。
PivotTableBeforeAllocateChanges ピボットテーブルに変更が適用される前に発生します。
PivotTableBeforeCommitChanges ピボットテーブルの OLAP データ ソースに対する変更が適用される前に発生します。
PivotTableBeforeDiscardChanges ピボットテーブルに対する変更が破棄される前に発生します。
PivotTableChangeSync ピボットテーブルが変更された後に発生します。
PivotTableUpdate ピボットテーブル レポートがワークシート上で更新された後で発生します。
SelectionChange ワークシートで選択範囲を変更したときに発生します。


代表的な
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





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

第126回.入力規則(Validation)
第127回.他のブックのマクロを実行(Runメソッド)
第128回.マクロをショートカットで起動(OnKeyメソッド)
第1回.マクロって何?VBAって何?
第2回.まずはマクロVBAを使う準備
第3回.マクロの記録
第4回.マクロはどこに書くの(VBEの起動)

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

Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)
ファイルの一覧取得・削除(File)|Google Apps Script入門(1月24日)
フォルダの一覧取得・作成・削除(Folder)|Google Apps Script入門(1月24日)
フォルダとファイルを扱う(DriveApp)|Google Apps Script入門(1月24日)
スプレッドシートが非常に遅い、高速化するには|Google Apps Script入門(1月17日)
画像のトリミング(PictureFormat,Crop)|ExcelマクロVBAサンプル集(12月27日)
シート保護|Google Apps Script入門(12月24日)

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

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.RangeとCellsの使い方|ExcelマクロVBA入門
3.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
6.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
7.変数とデータ型(Dim)|ExcelマクロVBA入門
8.ひらがな⇔カタカナの変換|エクセル基本操作
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.VBAのFindメソッドの使い方には注意が必要です|ExcelマクロVBA技術解説



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

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


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

    ↑ PAGE TOP