エクセルVBAでのワークシートのイベント
セルの値が変更されたとき、ダブルクリックが発生したとき、シートが選択されたときなどに、マクロ/ VBAスニペットを実行することをお勧めします。これらすべての場合で、ワークシートイベントハンドラーを使用します。イベントハンドラーは、特定のイベントが発生するたびにVBAコードを実行するのに役立ちます。
この記事では、各ワークシートイベントハンドラーについて簡単に学習します。
ワークシートイベントハンドラーとは何ですか?ワークシートイベントハンドラは、ワークシートモジュールに対してローカルなサブルーチンです。
ワークシートイベントハンドラコードをどこに書くか?
ワークシートのイベントは、スプレッドシートオブジェクトにのみ書き込まれます。一部のモジュールまたはクラスモジュールでワークシートイベントを記述した場合、エラーは発生しませんが、機能しません。
シートオブジェクトに書き込む。それをダブルクリックするか、右クリックしてコードの表示をクリックします。コード書き込みエリアが表示されます。
ワークシートに特定のイベントのコードを書く方法は?
これで、編集モードになっているときに、左上隅のドロップダウンメニューに一般が表示されます。ドロップダウンをクリックして、ワークシートを選択します。
右上隅のドロップダウンに、すべてのイベントが表示されます。必要なものを選択すると、そのイベントのスケルトンコードが作成されます。
各イベントには固定のプロシージャ名があります。これらは予約済みのサブルーチン名です。シート上の他のサブルーチンに使用することはできません。モジュールでは、これらは通常のサブルーチンとして機能します。
重要:そのリストの各サブルーチンは、指定されたイベントで実行されます。
1つのタイプのワークシートイベントプロシージャは、1つのシートに1回だけ書き込むことができます。 1枚のシートに2つの同じイベント処理手順を書き込むと、エラーが発生し、いずれも実行されません。もちろん、エラーはあいまいなサブルーチンになります。
それぞれのイベントについて簡単に学びましょう。
1. TheWorksheet_Change(ByVal Target As Range)Eventこのイベントは、含まれているワークシートに変更を加えたときにトリガーされます(フォーマットは除外されます)。シート全体に変更が加えられた場合に何かを実行したい場合、コードは次のようになります。
Private Sub Worksheet_Change(ByVal Target As Range) 'do somehting Msgbox "done something" End Sub
「ターゲット」は常にアクティブセルです。
別の例:A1が変更された場合は、セルB1に日付と時刻を入力することをお勧めします。その場合、worksheet_changeイベントを使用します。コードは次のようになります:
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1").Value2 = Format(Now(), "hh:mm:ss") End If End Sub
これはセルA1のみを対象とします。
範囲をターゲットにする場合は、次の例を使用します。
link:/ events-in-vba-run-macro-if-any-change-made-on-sheet-range [指定された範囲のシートに変更が加えられた場合はマクロを実行]
2. TheWorksheet_SelectionChange(ByVal Target As Range)* Event名前が示すように、このイベントは選択が変更されたときにトリガーされます。つまり、カーソルがセルA1にあり、他のセルに移動すると、このサブルーチンのコードが実行されます。
以下のコードは、アクティブセルの色が変更されるたびに、それが偶数行である場合に変更します。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row Mod 2 = 0 Then Target.Interior.ColorIndex = 22 End If End Sub
これで、カーソルが偶数行に移動するたびに、色が付けられます。奇数行のセルは使用されません。
Worksheet_SelectionChangeイベントの別の例:
link:/ events-in-vba-simplest-vba-code-to-highlight-current-row-and-column-using [現在の行と列を使用して強調表示する最も簡単なVBAコード]
3. Worksheet_Activate()イベントこのイベントは、シートを含むイベントコードがアクティブ化されたときにトリガーされます。
このイベントのスケルトンコードは次のとおりです。
Private Sub Worksheet_Activate() End Sub
簡単な例は、シートが選択されたときにシート名を表示することです。
Private Sub Worksheet_Activate() MsgBox "You are on " & ActiveSheet.Name End Sub
このコードを含むシートにアクセスするとすぐに、イベントが実行され、「シート名を使用しています」というメッセージが表示されます
(sheet2は私の場合です)。
4. Worksheet_Deactivate()イベントこのイベントは、シートを含むコードを離れるときにトリガーされます。つまり、シートを離れるときに行を非表示にするなどの操作を行う場合は、このVBAイベントを使用します。構文は次のとおりです。
Private Sub Worksheet_Deactivate() 'your code ' End Sub
以下の例のWorksheet_Deativateイベントは、このシートを離れるときに、マスターシートを離れたというメッセージをポップアップするだけです。
Private Sub Worksheet_Deactivate() MsgBox "You Left The Master Sheet" End Sub
===
5. Worksheet_BeforeDelete()* Eventこのイベントは、シートを含むVBAイベントの削除を確認したときにトリガーされます。構文は単純です:
Private Sub Worksheet_BeforeDelete() End Sub
以下のコードは、削除しようとしているシートの内容をコピーするかどうかを尋ねます。
Private Sub Worksheet_BeforeDelete() ans = MsgBox("Do you want to copy the content of this sheet to a new sheet?", vbYesNo) If ans = True Then 'code to copy End If End Sub
6. TheWorksheet_BeforeDoubleClick(ByVal Target As Range、Cancel As Boolean)*イベントこのイベントは、ターゲットセルをダブルクリックしたときにトリガーされます。このVBAワークシートイベントの構文は次のとおりです。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) End Sub
ターゲットセルまたは範囲を設定しない場合、シートをダブルクリックするたびに起動します。
Cancel変数はブール変数です。 Trueに設定すると、デフォルトのアクションは実行されません。つまり、セルをダブルクリックしても、編集モードにはなりません。
以下のコードは、セルをダブルクリックすると、セルを色で塗りつぶします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Cancel = True Target.Interior.ColorIndex = 7 End Sub
以下のコードはセルA1を対象としています。指定された色ですでに塗りつぶされている場合は、色が消えます。いいねボタンやチェックボックスによく似ています。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Then Cancel = True If Target.Interior.ColorIndex = 4 Then Target.Interior.ColorIndex = xlColorIndexNone Else Target.Interior.ColorIndex = 4 End If End If End Sub
7. TheWorksheet_BeforeRightClick(ByVal Target As Range、Cancel As Boolean)*イベントこのイベントは、ターゲットセルを右クリックしたときにトリガーされます。このVBAワークシートイベントの構文は次のとおりです。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True ' 'your code ' End Sub
以下のコードは、セルを右クリックすると、セルに値1を入力します。
「キャンセル」演算子をTrueに設定しているため、デフォルトの右クリックオプションは表示されません。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Cancel = True Target.Value = 1 End Sub
8. TheWorksheet_Calculate()*イベントExcelがシートを計算するときに何かを発生させたい場合は、このイベントを使用します。 Excelがシートを計算するたびにトリガーされます。構文は単純です:
Private Sub Worksheet_Calculate() ' 'your code ' End Sub
6. Worksheet_FollowHyperlink(ByVal Target As Hyperlink)* Eventこのプロシージャは、シート上のハイパーリンクをクリックすると実行されます。このイベントハンドラーの基本的な構文は次のとおりです。
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) ' 'your code ' End Sub
必要に応じて、ターゲットハイパーリンクを設定できます。ターゲットハイパーリンクを設定しない場合、シートを含むコード上のハイパーリンクをクリックすると実行されます。
そうですね、これらはいくつかの基本的なワークシートイベントであり、それらについて知っていると便利です。以下はあなたが読みたいと思うかもしれないいくつかの関連記事です。
この記事またはその他のExcel / VBA関連の記事について疑問がある場合は、以下のコメントセクションでお知らせください。
関連記事:
link:/ Tips-using-worksheet-change-event-to-run-macro-when-any-change-is-made [ワークシート変更イベントを使用して変更が行われたときにマクロを実行する]
* |したがって、シートが更新されるたびにマクロを実行するには、VBAのワークシートイベントを使用します。
link:/ events-in-vba-run-macro-if-any-change-made-on-sheet-range [指定された範囲のシートに変更が加えられた場合はマクロを実行]
* |指定した範囲の値が変更されたときにマクロコードを実行するには、このVBAコードを使用します。指定された範囲で行われた変更を検出し、イベントを発生させます。
link:/ events-in-vba-simplest-vba-code-to-highlight-current-row-and-column-using [現在の行と列を強調表示する最も簡単なVBAコード]
|この小さなVBAスニペットを使用して、シートの現在の行と列を強調表示します。
人気の記事:
link:/ keyboard-formula-shortcuts-50-excel-shortcuts-to-increase-your-productivity [生産性を高めるための50のExcelショートカット]
|あなたの仕事をより速くしてください。これらの50のショートカットにより、Excelでの作業がさらに高速になります。
link:/ forms-and-functions-introduction-of-vlookup-function [ExcelのVLOOKUP関数]
|これは、さまざまな範囲やシートから値を検索するために使用される、Excelの最も使用され人気のある関数の1つです。 link:/ Tips-countif-in-microsoft-excel [COUNTIF in Excel 2016]
|この驚くべき関数を使用して、条件付きの値をカウントします。特定の値をカウントするためにデータをフィルタリングする必要はありません。
ダッシュボードを準備するには、Countif関数が不可欠です。
link:/ excel-formula-and-function-excel-sumif-function [ExcelでSUMIF関数を使用する方法]
|これは、ダッシュボードのもう1つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。