Target と Selection と ActiveCell
職場の勉強会で、WorkSheet_SelectionChange イベントを扱う機会があった。
選択範囲の値を得て、何某かの処理をする。私の中では、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
考えてみれば極々自然なことなのに、今までそのように着想したことがなかった。
感謝。
初級と言えど、隅から隅まで知っている筈もなく。どのような講座であっても、
必ず何か一つ得るものがあるものだと、改めて思った次第です。
参考まで。