イベント
・イベントとは
・ブックのイベント
・シートのイベント
しかし、VBAをやっていくうえで、イベントは必ず覚えなければならないものです。
試験は別として、必ず学習することをお勧めいたします。
【ここでのポイント】
どれが出題されるかはわかりません。
それでは、これらを全て個別に覚える必要があるのでしょうか・・・
イベントの仕組みと決まりを理解すれば、どのイベントが出題されても困ることはありません。
良く使われるイベントはある程度決まっていますので、そのサンプルコードを通して、
イベント全体を理解するようにして下さい。
イベントとは
その操作に対応したVBAのプロシージャーが起動される仕組みです。
この時に起動されるプロシージャはイベントプロシージャと呼ばれます。
↓
イベントが発生する
↓
対応するイベントプロシージャが起動される
イベントの発生は、手動でもVBAでも、どちらで操作が行われても発生します。
決められたモジュールに、決められたプロシージャ(引数も決められている)に記述しなければなりません。
Workbook_Openを例に、イベントプロシージャの作成手順を説明します。
ThisWorkbookを右クリックからコードの表示
または、
ThisWorkbookをダブルクリックでコード表示します。
プロシージャーの作成
Private Sub Workbook_Open()
End Sub
Workbookの規定のイベントとして、自動でWorkbook_Openが追加されます。
目的のイベント以外が挿入された場合は、
オブジェクトの右側コンボの、プロシージャーのコンボより目的のイベントを選択します。
不要なイベントプロシージャが追加されたときは、プロシージャを作治しておきます。
ブックのイベント
イベント | 発生条件等 |
Activate | ブック、ワークシート、グラフ シート、または埋め込みグラフがアクティブになったときに発生します。 |
AddinInstall | ブックがアドインとして組み込まれたときに発生します。 |
AddinUninstall | ブックのアドインとして組み込みを解除したときに発生します。 |
AfterSave | ブックが保存された後に発生します。 |
AfterXmlExport | Microsoft Office Excel がデータを保存するか、指定されたワークブックから XML データをエクスポートした後で発生します。 |
AfterXmlImport | 既存の XML データ接続が更新されたか、または開いている Microsoft Excel ブックに新しい XML データがインポートされた後に発生します。 |
BeforeClose | ブックを閉じる前に発生します。ブックが変更された場合、ユーザーに変更内容の保存を要求する前に、このイベントが発生します。 |
BeforePrint | ブックまたはその中に含まれる内容を印刷する前に発生します。 |
BeforeSave | ブックを保存する前に発生します。 |
BeforeXmlExport | Microsoft Office Excel がデータを保存するか、指定されたワークブックから XML データをエクスポートする前に発生します。 |
BeforeXmlImport | 既存の XML データ接続が更新されるか、または開いている Microsoft Excel ブックに新しい XML データがインポートされる前に発生します。 |
Deactivate | グラフ、ワークシート、またはブックが非アクティブになったときに発生します。 |
NewChart | 新しいグラフをブックに作成したときに発生します。 |
NewSheet | 新しいシートをブックに作成したときに発生します。 |
Open | ブックを開いたときに発生します。 |
PivotTableCloseConnection | ピボットテーブル レポート接続が閉じた後に発生します。 |
PivotTableOpenConnection | ピボットテーブル レポート接続が開いた後に発生します。 |
RowsetComplete | ユーザーが OLAP ピボットテーブルで行セット アクションを起動するか、レコードセットを詳細表示するとイベントが発生します。 |
SheetActivate | シートがアクティブになったときに発生します。 |
SheetBeforeDoubleClick | 既定のダブルクリックの操作の前に、ワークシートをダブルクリックしたときに発生します。 |
SheetBeforeRightClick | 既定の右クリックの操作の前に、ワークシートを右クリックしたときに発生します。 |
SheetCalculate | ワークシートを再計算したり、グラフでデータをプロットして変更した後に発生します。 |
SheetChange | ユーザーまたは外部リンクにより、ワークシートのセルが変更されるときに発生します。 |
SheetDeactivate | シートが非アクティブになったときに発生します。 |
SheetFollowHyperlink | Excel のハイパーリンクをクリックすると発生します。ワークシート レベルでのイベントについては、FollowHyperlink イベントのヘルプ トピックを参照してください。 |
SheetPivotTableAfterValueChange | ピボットテーブル内のセルまたはセル範囲が編集または再計算された後に発生します (数式を含むセルの場合)。 |
SheetPivotTableBeforeAllocateChanges | ピボットテーブルに変更が適用される前に発生します。 |
SheetPivotTableBeforeCommitChanges | ピボットテーブルの OLAP データ ソースに対する変更が適用される前に発生します。 |
SheetPivotTableBeforeDiscardChanges | ピボットテーブルに対する変更が破棄される前に発生します。 |
SheetPivotTableChangeSync | ピボットテーブルが変更された後に発生します。 |
SheetPivotTableUpdate | ピボットテーブル レポートのシートが更新された後に発生します。 |
SheetSelectionChange | いずれかのワークシートで選択範囲を変更したときに発生します。 選択範囲がグラフ シート上にある場合は発生しません。 |
Sync | ドキュメント ワークスペースに含まれているブックのローカル コピーがサーバー上のコピーと同期されたときに発生します。 |
WindowActivate | ブックのウィンドウがアクティブになったときに発生します。 |
WindowDeactivate | ブックのウィンドウが非アクティブになったときに発生します。 |
WindowResize | ブックのウィンドウ サイズを変更したときに発生します。 |
上記の太字については、何の操作のイベントか分かるようにしておいてください。
Workbook_イベント
になります。
Workbook_Activate
となります。
ブックのイベントなので、全てのシートで共通のイベントになります。
ブックモジュールに記述することで、全てのシートに共通のイベントを作成できるという事です。
使用例.
Private Sub Workbook_Open()
Sheets(1).Select
Application.Goto Range("A1"), True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ActiveWorkbook.Saved = False Then
ActiveWorkbook.Save
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If ActiveWorkbook.Saved = False Then
Cancel = True
End If
End Sub
CancelにTrueを入れる事で、発生したイベントを取り消すことが出来ます。
シートのイベント
ワークシートまたはそのセルに対し特定の操作が行われた時に実行されます。
イベントは、手動でもVBAでも、どちらで操作が行われても発生します。
イベント | 発生条件等 |
Activate | ブック、ワークシート、グラフ シート、または埋め込みグラフがアクティブになったときに発生します。 |
BeforeDoubleClick | 既定のダブルクリックの操作の前に、ワークシートをダブルクリックしたときに発生します。 |
BeforeRightClick | 既定の右クリックの操作の前に、ワークシートを右クリックしたときに発生します。 |
Calculate | ワークシートを再計算した後に Worksheet オブジェクトで発生します。 |
Change | ワークシートのセルがユーザーまたは外部リンクにより変更されたときに発生します。 |
Deactivate | グラフ、ワークシート、またはブックが非アクティブになったときに発生します。 |
FollowHyperlink | ワークシートのハイパーリンクをクリックすると発生します。アプリケーション レベルおよびブック レベルでのイベントについては、SheetFollowHyperlink イベントおよび SheetFollowHyperlink Event イベントのヘルプ トピックを参照してください。 |
PivotTableAfterValueChange | ピボットテーブル内のセルまたはセル範囲が編集または再計算された後に発生します (数式を含むセルの場合)。 |
PivotTableBeforeAllocateChanges | ピボットテーブルに変更が適用される前に発生します。 |
PivotTableBeforeCommitChanges | ピボットテーブルの OLAP データ ソースに対する変更が適用される前に発生します。 |
PivotTableBeforeDiscardChanges | ピボットテーブルに対する変更が破棄される前に発生します。 |
PivotTableChangeSync | ピボットテーブルが変更された後に発生します。 |
PivotTableUpdate | ピボットテーブル レポートがワークシート上で更新された後で発生します。 |
SelectionChange | ワークシートで選択範囲を変更したときに発生します。 |
上記の太字については、何の操作のイベントか分かるようにしておいてください。
Worksheet_イベント
になります。
Worksheet_Activate
となります。
Private Sub Worksheet_Activate()
Application.Goto ActiveSheet.Range("A1"), True
End Sub
セルをダブルクリックした時、当該セルで、列幅・行高を自動調整します。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
.Columns.AutoFit
.Rows.AutoFit
End With
End Sub
上記の例では、ダブルクリックによって、列幅・行高が調整された後、
通常のダブルクリックであるセル編集状態となります。
セル編集状態にしたくない場合は、
Cancel = True
この記述を入れます。
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が実行されてしまいます。
結果的に、イベントの連鎖が起こり無限にループしてしまいます。
これで、新たなイベント発生が発生するようにしています。
これを入れ忘れると、プロシージャー終了後も、新たなイベントが発生しなくなります。
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
イベントプロシージャの規則を理解する
右クリックの操作の前に発生するイベントは、
引数
引数 | 説明 |
Cancel As Boolean | 初期値はFalseで受け取ります。 Trueを入れる事で、発生したイベントをキャンセルします。 これ以降の操作に伴う動作が行われなくなります。 |
ByVal Sh As Object | イベントの発生源のシートが入っています。 |
ByVal Target As Range | イベントの発生源のセル(Rangeオブジェクト)が入っています。 |
ByVal Target As Hyperlink | イベントの発生源のハイパーリンクのオブジェクトが入っています。 |
ByVal Wn As Window | イベントの発生源のWindowが入っています。 |
※ピボットテーブルに関する引数は省略しています。
試験には出ないと思います。
※HyperlinkとWindowも試験には出ないと思いますが、
念の為、記載しています。
ByVal Target As Range
Worksheet_Changeでは、
この場合は、値を入れた複数セル範囲がTargetに入っています。
この場合に、Target内の全セルに対して何らかの処理をする場合は、
後の章でやる、For Eachステートメントを使用します。
【業務改善の実務】
しかし、その利用は慎重に検討すべきものです。
本当にそれが良いかどうかは、よくよく考えるべき事です。
わざわざイベントで自動化する必要があるのかどうかを考えましょうという事です。
ボタンクリックなら、その直前にブックを保存することもできるので、
場合によっては、マクロ処理をなかったことにすることも可能です。
シートに入力した内容を良く確認してから、ボタンをクリックするという事の良さと比較検討しましょうという事です。
確実に正しく処理できるようにVBAを書くことは、それなりの技術力が必要になってきます。
例えば、
ブックを開いた時
ブックを閉じる時
シートを選択した時
このような時に自動実行することは、ブックの操作性を大きく向上させるものです。
【本サイト内の関連ページ】
イベント処理について
ブックを開いた時に指定シートを表示(Workbook_Open)
VBAエキスパート公式テキスト
こちらは必須として購入した方が良いでしょう。
ちょっと高いなーとは思いますが、
書籍を購入することで、学習用データが提供されています。
・サンプルブック
・VBAエキスパート模擬問題
これらが使えるようになります。
このシリーズでは、テキストを読みながら学習していることを前提とします。
同じテーマ「VBAエキスパート対策」の記事
マクロの実行
VBAベーシック試験対策まとめ
プロシージャ
イベント
ステートメント(スタンダード)
関数
エラーへの対処
APIとOLEオートメーション
変数と配列
レジストリの操作
ファイルの操作
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(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)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA入門編
- VBAエキスパート対策
- イベント
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。