セルの値が変更されたとき、ダブルクリックが発生したとき、シートが選択されたときなどに、マクロ/ VBAスニペットを実行することをお勧めします。これらすべての場合で、ワークシートイベントハンドラーを使用します。イベントハンドラーは、特定のイベントが発生するたびにVBAコードを実行するのに役立ちます。

この記事では、各ワークシートイベントハンドラーについて簡単に学習します。

ワークシートイベントハンドラーとは何ですか?ワークシートイベントハンドラは、ワークシートモジュールに対してローカルなサブルーチンです。

ワークシートイベントハンドラコードをどこに書くか?

image

ワークシートのイベントは、スプレッドシートオブジェクトにのみ書き込まれます。一部のモジュールまたはクラスモジュールでワークシートイベントを記述した場合、エラーは発生しませんが、機能しません。

シートオブジェクトに書き込む。それをダブルクリックするか、右クリックしてコードの表示をクリックします。コード書き込みエリアが表示されます。

ワークシートに特定のイベントのコードを書く方法は?

これで、編集モードになっているときに、左上隅のドロップダウンメニューに一般が表示されます。ドロップダウンをクリックして、ワークシートを選択します。

右上隅のドロップダウンに、すべてのイベントが表示されます。必要なものを選択すると、そのイベントのスケルトンコードが作成されます。

image

各イベントには固定のプロシージャ名があります。これらは予約済みのサブルーチン名です。シート上の他のサブルーチンに使用することはできません。モジュールでは、これらは通常のサブルーチンとして機能します。

重要:そのリストの各サブルーチンは、指定されたイベントで実行されます。

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

これで、カーソルが偶数行に移動するたびに、色が付けられます。奇数行のセルは使用されません。

image

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

image

===

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

image

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
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つの重要な機能です。これは、特定の条件で値を合計するのに役立ちます。