SelectとActivateは親オブジェクトが異なる
SelectメソッドとActivateメソッドはそれぞれ対象となる親オブジェクトが異なります。
Selectメソッドの親はセルのRangeオブジェクト、ワークシートのWorksheetオブジェクトの2つです。
Activateメソッドの親はセルのRangeオブジェクト、ワークシートのWorksheetオブジェクト、ブックのWorkbookオブジェクト、ウィンドウのWindowオブジェクトの4つです。
ここでは比較がしやすいRangeオブジェクトでのセルの選択で違いを説明します。
セルの選択
セルを選択する際にRangeオブジェクトのSelectメソッドとActivateメソッドが利用できます。
VBAで実行するとどちらもセルを選択するため違いが分かりにくいのですが、Excel上のセルの選択操作を行った場合と同様の動きを実現するために2つのメソッドがあります。
Selectは選択範囲、Activateは現在セル
Excel上で複数選択すると以下のように表示されます。
選択範囲が黒い太線で囲まれ、選択開始セルは白抜き表示になります。
この黒い太線で囲まれている部分を示すのがSelectメソッドで、白抜き部分がActivateメソッドになります。
このように用途が異なるため、2つのメソッドに分かれています。
Selectメソッドの用途
Selectメソッドはセルの選択範囲を示します。
選択範囲は単一セルの場合でも複数セルの場合でも同じSelectメソッドで行うことができます。
VBAの処理では、Selectメソッドで範囲選択したあとにApplicationオブジェクトのSelectionプロパティとして利用できます。
以下のコードではA1セルからC4セルを範囲選択し、Selectionプロパティで選択した全てのセルをループし、セル座標をセルの値として設定しています。
1 2 3 4 5 6 7 8 9 |
Sub SelectTest() Dim r As Range Range("A1:C4").Select For Each r In Selection r.Value = r.Address Next End Sub |
実行結果
Activateメソッドの用途
Activateメソッドは処理対象となるセルを選択します。
事前にSelectメソッドで複数選択されているセル範囲がある場合で、その中で処理対象をActivateメソッドで変更した場合は、Excel上は白抜きセルが変更されたように表示されます。
以下のコードではA1セルからC4セルを範囲選択し、Selectionプロパティで選択した全てのセルをループし、Activateメソッドで処理対象セルを選択しています。
1 2 3 4 5 6 7 8 9 |
Sub ActivateTest() Dim r As Range Range("A1:C4").Select For Each r In Selection r.Activate Next End Sub |
デバッグすると分かりますが、A1セルからC4セルまで順に白抜きセルが変わっていきます。
関数終了時点ではC4セルが白抜き状態になります。