みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、ExcelVBAのテクニックを紹介・解説いたします。
今回紹介するのは、「セル選択時にイベントを発生させる」です。
【目次】
それでは、始めましょう!
Worksheetイベントについて
Worksheetイベントは、ExcelVBAイベントのひとつです。
ExcelVBAイベントがどんなものかは、過去記事(Vol.8)で紹介しています。
Worksheetイベントですが、こちらはワークシート上でのユーザー操作を起因に発生させられます。
イベント起因となるユーザー操作はいくつかありますが、使用頻度の高いものは限られています。
以下は、使用頻度が高いものです。
・セルを選択したとき
・セルの値が変化した時
・セルをダブルクリップしたとき
・セルがアクティブ状態/非アクティブ状態になった時
この記事では、「セルを選択した時」にイベントを発生させる、Worksheet_SelectionChangeを紹介します。
Worksheet_SelectionChangeの設定方法
Worksheetイベントを設定するには、以下の手順で操作します。
①VBAエディタを開く
②プロジェクトエクスプローラのSheet1をダブルクリックする(Sheet1以外のシートでも可)

③コードウインドウ上部のドロップダウンリストで、左側リストからWorksheetを選択する
④コードウインドウ上部のドロップダウンリストで、右側リストからSlectionChangeを選択する

⑤コードウインドウにWorksheet_SelectionChangeイベントプロシージャが作成される

以上がイベントの設定手順になります。
他のイベントを設定する場合にも、同様の手順で設定できるので、覚えておきましょう。
注意点としては、同じ種類のWorksheetイベントは1つのシートに1つしか設定できないところです。
上記手順なら、Worksheet_SelectionChangeイベントをSheet1に複数設定することはできません。
イベント引数について
Worksheet_SelectionChangeイベントプロシージャでは、Targetという引数が使用できます。

このTarget引数には、ユーザー操作が行われたセルの情報が記録されています。
Target引数はRangeデータ型として定義されていますので、イベントプロシージャで利用可能です。
利用するときは、Target.AddressやTarget.RowやTarget.Columnなど、Range型変数のプロパティを使用します。
Worksheet_SelectionChangeイベントの使用例
使用例① 選択範囲をポップアップ表示する
セルの選択カーソルを移動するたびに、選択されているセルの情報が表示されます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox Target.Address '選択セルのアドレスをポップアップ表示' End Sub
<セルを1つ選択した場合>

<セルを複数選択した場合>

使用例② 選択範囲の書式設定を変更する
選択セルの書式のみ変更が可能です。この例ではセル背景色を設定しています。
変更箇所をわかりやすくするために、書式設定はすべてクリアしてから変更させます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cells.Interior.ColorIndex = -4142 'すべてのセルの背景色を初期化' Target.Interior.ColorIndex = 3 '選択セルの背景色を赤に変更' End Sub
<セル選択前の状態(B3~D4が選択中)>

<セル選択後の状態(A1~C2を選択)>

使用例③ 指定セルのみでイベントを発生させる
Target引数の行/列位置が特定セルと一致する場合のみ、セルを変化させます。
この例では、現在日付(B2)を選択した時と、現在時刻(B3)を選択した時のみ、セルに値を設定しています。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row = 2 And Target.Column = 2 Then 'B2セルが選択された場合' Target.Value = Format(Now, "yyyy/mm/dd") '現在日付を入力' End If If Target.Row = 3 And Target.Column = 2 Then 'B3セルが選択された場合' Target.Value = Format(Now, "HH:MM:SS") '現在時刻を入力' End If End Sub
<初期状態>

<B2セルを選択した時>

<B3セルを選択した時>

以上、「セル選択時にイベントを発生させる」のテクニック紹介でした。
それでは、また次回お会いしましょう!