Target と Selection と ActiveCell

職場の勉強会で、WorkSheet_SelectionChange イベントを扱う機会があった。
f:id:Infoment:20191008204839p:plain

選択範囲の値を得て、何某かの処理をする。私の中では、Target を使うのが定番。例えば、こんな感じだ。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 ' 複数セル選択によるエラーを回避。
    If Target.Count > 1 Then
        Exit Sub
    Else
        MsgBox Target.Value
    End If
End Sub

とここで、最近始めたばかりの参加者から、ActiveCellを使うという案が出た。確かにこの場合、以下のいずれも有効だ。

  • Selection (選択範囲)
  • Target (選択範囲)
  • ActiveCell (選択範囲のうち、一番左上のセル)

この内、先の二つは、複数範囲を選択するとエラーになる(「複数セルの値」を、そのままメッセージボックスには表示できない)。だからこそ先のサンプルでは、選択セルが1つを超える場合(つまり2個以上の場合)はExit Subとすることで、エラーを回避していた。

しかしActiveCell であれば、同時に複数のセルをアクティブにすることはできないので、複数範囲を選択してもエラーにならない。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox ActiveCell.Value
End Sub

f:id:Infoment:20191008210148p:plain
考えてみれば極々自然なことなのに、今までそのように着想したことがなかった。
感謝。

初級と言えど、隅から隅まで知っている筈もなく。どのような講座であっても、
必ず何か一つ得るものがあるものだと、改めて思った次第です。

参考まで。