VBAエキスパート対策イベント最終更新日:2019-08-26イベント・イベントとは・ブックのイベント・シートのイベント2019/05/15からの「VBAエキスパート」リニューアルに伴い出題範囲から削除されました。マクロVBA情報を中心に、エクセル関数・基本操作までサンプルとともに解説。初心者向けの基本から上級者向けの高度な内容までVBAサンプルコードを掲載解説しています。VBAをやっていくうえで、イベントは必ず覚えなければならないものです。試験は別として、必ず学習することをお勧めいたします。【ここでのポイント】ブックとシートのイベントは多数あります。どれが出題されるかはわかりません。それでは、これらを全て個別に覚える必要があるのでしょうか・・・そんな必要はありません。イベントの仕組みと決まりを理解すれば、どのイベントが出題されても困ることはありません。ここでは、イベントの仕組みと、VBAコードの読み方を覚えて下さい。良く使われるイベントはある程度決まっていますので、そのサンプルコードを通して、イベント全体を理解するようにして下さい。イベントとはVBAにおけるイベントとは、エクセル上で特定の操作(アクション)が行われた時に、その操作に対応したVBAのプロシージャーが起動される仕組みです。この時に起動されるプロシージャはイベントプロシージャと呼ばれます。特定の操作(アクション)でプロシージャが起動されることを、イベントが発生するという言い方もします。このイベントを使う事で、Excel上での特定操作でマクロを自動実行することが出来ます。対応するイベントプロシージャが起動されるイベントが発生する操作は、主にキーボードが押される、マウスがクリックされる、などがあります。イベントの発生は、手動でもVBAでも、どちらで操作が行われても発生します。決められたモジュールに、決められたプロシージャ(引数も決められている)に記述しなければなりません。イベントプロシージャの作成方法ワークブックを開いたときに発生するイベント、Workbook_Openを例に、イベントプロシージャの作成手順を説明します。Objects」内の「ThisWorkbook」に記述します。以下では、VBEの操作手順を説明します。コード表示VBE画面で、ThisWorkbookを右クリックからコードの表示または、ThisWorkbookをダブルクリックでコード表示します。プロシージャーの作成コードウインドウの上部のオブジェクトのコンボより、Workbookを選択する。SubWorkbookの規定のイベントとして、自動でWorkbook_Openが追加されます。目的のイベント以外が挿入された場合は、オブジェクトの右側コンボの、プロシージャーのコンボより目的のイベントを選択します。不要なイベントプロシージャが追加されたときは、プロシージャを作治しておきます。ブックのイベントWorkbookのイベントプロシージャーは、ブックに対し特定の操作が行われた時に実行されます。Objects」内の「ThisWorkbook」に記述します。Workbookのイベントには以下があります。シート、または埋め込みグラフがアクティブになったときに発生します。ブックがアドインとして組み込まれたときに発生します。ブックのアドインとして組み込みを解除したときに発生します。ブックが保存された後に発生します。データをエクスポートした後で発生します。データがインポートされた後に発生します。ブックを閉じる前に発生します。ブックが変更された場合、ユーザーに変更内容の保存を要求する前に、このイベントが発生します。ブックまたはその中に含まれる内容を印刷する前に発生します。ブックを保存する前に発生します。データをエクスポートする前に発生します。データがインポートされる前に発生します。グラフ、ワークシート、またはブックが非アクティブになったときに発生します。新しいグラフをブックに作成したときに発生します。新しいシートをブックに作成したときに発生します。ブックを開いたときに発生します。レポート接続が閉じた後に発生します。レポート接続が開いた後に発生します。アクションを起動するか、レコードセットを詳細表示するとイベントが発生します。シートがアクティブになったときに発生します。既定のダブルクリックの操作の前に、ワークシートをダブルクリックしたときに発生します。既定の右クリックの操作の前に、ワークシートを右クリックしたときに発生します。ワークシートを再計算したり、グラフでデータをプロットして変更した後に発生します。ユーザーまたは外部リンクにより、ワークシートのセルが変更されるときに発生します。シートが非アクティブになったときに発生します。ハイパーリンクをクリックすると発生します。トピックを参照してください。(数式を含むセルの場合)。ピボットテーブルに変更が適用される前に発生します。ソースに対する変更が適用される前に発生します。ピボットテーブルに対する変更が破棄される前に発生します。ピボットテーブルが変更された後に発生します。レポートのシートが更新された後に発生します。いずれかのワークシートで選択範囲を変更したときに発生します。シート上にある場合は発生しません。コピーがサーバー上のコピーと同期されたときに発生します。ブックのウィンドウがアクティブになったときに発生します。ブックのウィンドウが非アクティブになったときに発生します。サイズを変更したときに発生します。上記の太字については、何の操作のイベントか分かるようにしておいてください。イベントプロシージャ名は、Workbook_イベントになります。イベントがActivateなら、Workbook_Activateとなります。Sheet○○シートに対する操作で発生するイベントですが、ブックのイベントなので、全てのシートで共通のイベントになります。シートのイベントに対応するイベントが存在します。特定のシートのイベントは、シートモジュールに記述しますが、ブックモジュールに記述することで、全てのシートに共通のイベントを作成できるという事です。使用例.ブックを開いた時、先頭シートのA1セルに移動します。Subブックが未保存の場合は、Closeをキャンセルする。SubCancelにTrueを入れる事で、発生したイベントを取り消すことが出来ます。シートのイベントワークシートまたはそのセルに対し特定の操作が行われた時に実行されます。イベントは、手動でもVBAでも、どちらで操作が行われても発生します。Objects」内のイベント処理するシートモジュールに記述します。Worksheetのイベントプロシージャーには以下があります。シート、または埋め込みグラフがアクティブになったときに発生します。既定のダブルクリックの操作の前に、ワークシートをダブルクリックしたときに発生します。既定の右クリックの操作の前に、ワークシートを右クリックしたときに発生します。オブジェクトで発生します。ワークシートのセルがユーザーまたは外部リンクにより変更されたときに発生します。グラフ、ワークシート、またはブックが非アクティブになったときに発生します。ワークシートのハイパーリンクをクリックすると発生します。トピックを参照してください。(数式を含むセルの場合)。ピボットテーブルに変更が適用される前に発生します。ソースに対する変更が適用される前に発生します。ピボットテーブルに対する変更が破棄される前に発生します。ピボットテーブルが変更された後に発生します。レポートがワークシート上で更新された後で発生します。ワークシートで選択範囲を変更したときに発生します。上記の太字については、何の操作のイベントか分かるようにしておいてください。イベントプロシージャ名は、Worksheet_イベントになります。イベントがActivateなら、Worksheet_Activateとなります。Subセルをダブルクリックした時、当該セルで、列幅・行高を自動調整します。通常のダブルクリックであるセル編集状態となります。Trueこの記述を入れます。A列に、小文字が入力された場合、直ちに大文字に変更する。Falseこれで、新たなイベント発生を抑止しています。これがないと、VBAでセル値を変更しても、新たにWorksheet_Changeが実行されてしまいます。結果的に、イベントの連鎖が起こり無限にループしてしまいます。Trueこれで、新たなイベント発生が発生するようにしています。これを入れ忘れると、プロシージャー終了後も、新たなイベントが発生しなくなります。※EnableEventsは、試験として出しやすいのでしっかり覚えて下さい。特定範囲内(A2:D100)の選択行の色を変更します。Subイベントプロシージャの規則を理解するイベントの名称イベントの名称を見ていくと、英単語をつなげたものだという事がわかると思います。右クリックの操作の前に発生するイベントは、BeforeRightClick大文字になっている所で単語を区切って読んでください。Clickこれをそのまま直訳すれば、何の操作で発生するイベントかが分かります。クリック難しく考える必要はありません、そのまま読めば大丈夫です。引数の種類は、以下のように限られています。初期値はFalseで受け取ります。Trueを入れる事で、発生したイベントをキャンセルします。これ以降の操作に伴う動作が行われなくなります。イベントの発生源のシートが入っています。イベントの発生源のセル(Rangeオブジェクト)が入っています。イベントの発生源のハイパーリンクのオブジェクトが入っています。イベントの発生源のWindowが入っています。※ピボットテーブルに関する引数は省略しています。試験には出ないと思います。念の為、記載しています。上記の引数は、全てのイベントに共通しています。CancelByValが指定されていないので、値の設定が有効だという事です。他の引数は、ByValなので値の設定は無意味です。RangeRangeオブジェクトなので、1つのセルの場合もあれば、複数のセル範囲もあり得ます。Ctrl+Enterで入力することで、複数セル範囲に一度に値を入れられます。Worksheet_Changeでは、この場合は、値を入れた複数セル範囲がTargetに入っています。Eachステートメントを使用します。業務のマクロ作成時には、なるべく自動化しようとすると、どうしてもイベントが必要になります。その利用は慎重に検討すべきものです。本当にそれが良いかどうかは、よくよく考えるべき事です。ボタンを配置して、使用者がクリックすることでマクロを動作すれば良い事を、わざわざイベントで自動化する必要があるのかどうかを考えましょうという事です。場合によっては、マクロ処理をなかったことにすることも可能です。シートに入力した内容を良く確認してから、ボタンをクリックするという事の良さと比較検討しましょうという事です。イベントを使ったマクロは、実装が難しいことも多くあります。確実に正しく処理できるようにVBAを書くことは、それなりの技術力が必要になってきます。イベントでなければ実現できないことも多々あります。ブックを開いた時ブックを閉じる時シートを選択した時このような時に自動実行することは、ブックの操作性を大きく向上させるものです。適切な場面でイベントを使えるように、しっかりと覚えて下さい。第124回.WorkbookのイベントプロシージャーWorkbookのイベントプロシージャーは、ブックに対し特定の操作(これがイベント)が行われた時に実行されます。イベントは、手動でもVBAでも、どちらで操作が行われても発生します。Workbookのイベントは多数用意されています。第125回.WorksheetのイベントプロシージャーWorksheetのイベントプロシージャーは、ワークシートまたはそのセルに対し特定の操作(これがイベント)が行われた時に実行されます。イベントは、手動でもVBAでも、どちらで操作が行われても発生します。Worksheetのイベントプロシージャーの一覧紹介と主要なイベントについて解説します。ワークブックのイベントは、ここに記述します。この2通りの方法があります。それぞれの簡単な説明と、動作の違いを解説します。Workbook_Openは、ブックが開かれたときに起動されるブックのイベントプロシージャーになります。この2通りの方法があります。それぞれの簡単な説明と、動作の違いを解説します。Workbook_Closeは、ブックが閉じられたときに起動されるブックのイベントプロシージャーになります。ブックを開いた時に指定シートを表示(Workbook_Open)Workbook_Openは、ブックを開いた時に実行されるイベントです、VBEの「MicrosoftExcelObjects」内の「ThisWorkbook」に記述します。上記では、ブックが開かれると、先頭シートのA1セルに移動しています。ブックが閉じられる直前に保存済を確認(Workbook_BeforeClose)Workbook_BeforeCloseは、ブックを閉じる直前に起動されるイベントです、手動で閉じる場合も、VBAで閉じる場合でも起動されます。ブックが未保存の場合は、Closeをキャンセルする。シートが選択された時に指定セルに移動(Worksheet_Activate)Worksheet_Activateは、シートが選択された時に実行されるイベントです、VBEの「MicrosoftExcelObjects」内の各シートに記述します。上記では、シートが選択されたとき、A1セルに移動しています。Application.GotoRange("A1"),ダブルクリックで行高・列幅調整(Worksheet_BeforeDoubleClick)セルをダブルクリックすることで、そのセル値で行高および列幅を自動調整するマクロVBAになります。これは、以下の操作をマクロVBAでまとめて行うことになります。「行の高さの自動調整」「列の幅の自動調整」この二つの操作を、マクロVBAで一度にやるということです。英小文字が入力されたら大文字に変換(Worksheet_Change)Worksheet_Changeは、セルの値が変更された時に起動されます。変更されたセルが、Rangeオブジェクトとして渡されます。セル選択で選択行の色を変更(Worksheet_SelectionChange)Worksheet_SelectionChangeは、セルの選択範囲を変更した時に起動されます。選択されたセルが、Rangeオブジェクトとして渡されます。マクロ書けば、こんな「いじめ」も「いたずら」も、サクッと克服できます。以下のような、セル結合の鬼と化したExcelに、罫線で囲んだ枠内に、1枠1文字で入れるという苦行を、マクロならサクッと解決できます。VBAエキスパート公式テキスト2019/5/30発売リニューアル版2019/7/26発売リニューアル版こちらは必須として購入した方が良いでしょう。書籍を購入することで、学習用データが提供されています。・サンプルブック・VBAエキスパート模擬問題これらが使えるようになります。このシリーズでは、テキストを読みながら学習していることを前提とします。VBAエキスパート対策イベントこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。VBAエキスパート対策イベントこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。新着記事アクセスランクおすすめ関連記事2019/05/15からの「VBAエキスパート」リニューアルに伴い出題範囲から削除されました。