Worksheet_SelectionChangeイベント

ワークシートのイベントマクロ
Worksheet_SelectionChange

リンクユニット


イベント 02回

選択範囲が変更されたときにマクロを実行する

Worksheet_SelectionChangeイベントプロシージャは、Range型の引数Targetを取ります。
ワークシートから、ショートカットキー、Alt + F11を入力して、VBE(Visual Basic Editor)を開きます。
前回は、プロジェクトエクスプローラでSheet1をダブルクリックするか、右クリックメニューでシートのコード画面を表示させました。

(サンプルファイルは、ありません。下部にあるコードをコピーして張り付けてご利用いただけます。)

SelectionChangeの構文

Worksheet_SelectionChange
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)

引数名 データ型 説明
Target Range 新しい選択範囲が渡されます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
	’処理したい内容をここに記述
End Sub

SelectionChange選択した範囲のアドレスを取得する

1. そしてオブジェクトボックスの三角をクリックして、オブジェクトとして[Worksheet]を 選択しました。 すると、自動的に[プロシージャボックス]は[SelectionChange]になります。デフォルトのイベントが挿入される仕様になっているからです。
このイベントが不要な場合は、消してかまいません。


Worksheet_SelectionChange1 border=0

2. 今回は、シート上でセルを新たに選択したときに、そのアドレスを表示させてみましょう。
セルのアドレスを取得する(Addressプロパティ)を使用します。 Range​オブジェクトのAddressプロパティは、セルやセル範囲のアドレスを文字列で返します。


Worksheet_SelectionChange2 border=0

Range.Address プロパティ

3. ここでアドレスを取得するには、RangeオブジェクトのAddress プロパティを使います。
構文 Object.Address(RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)
この場合に必要なのは、RowAbsolute, ColumnAbsoluteの2つです。Trueは絶対参照、Falseは相対参照となります。

Address構文
 .Address (RowAbsolute, ColumnAbsolute, ReferenceStyle, External, RelativeTo)

引数名 データ型 説明
RowAbsolute Optional 行部分の参照を絶対参照として返すには、 True を指定。
ColumnAbsolute Optional 列部分の参照を絶対参照として返すには、 True を指定。
ReferenceStyle 省略可能 参照形式を指定します。 既定値は xlA1。
External Optional 外部参照を返すには、 True を指定。
RelativeTo Optional RowAbsolute および ColumnAbsolute が False であるときに、ReferenceStyle が xlR1C1 である場合は、相対参照の開始点を含める必要があります。 この引数は開始点を定義する Range オブジェクトです。


Worksheet_SelectionChange3 border=0

4. Sheet1を開いて、セルを選択すると、メッセージボックスで、アドレスを表示します。


Worksheet_SelectionChange4 border=0
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  MsgBox Target.Address(False, False)
End Sub

選択したセルの背景色が変わる

5.今度は、メッセージボックスの表示ではなく、新たに選択したセルを操作しましょう。 このコードでは、選択したセルの背景色が変わります。


Worksheet_SelectionChange5 border=0
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Target.Interior.ColorIndex = 18
End Sub