Rangeオブジェクトのメソッドである、
SelectメソッドとActivateメソッドの違いを解説します。
同じところ
どちらも選択セルを変更するメソッドです。
Sheet1のA1セルが選択されている状態では、
以下のコードはどちらも「B3:D5」セルを選択状態にします。
Worksheets("Sheet1").Range("B3:D5").Select Worksheets("Sheet1").Range("B3:D5").Activate
別のシートがアクティブの際に実行するとエラーになる仕様も同じで、
上記のコードはどちらも
| Rangeクラスの○○メソッドが失敗しました。 |
エラーとなります。
違うところ
Activateメソッドは「選択範囲内のアクティブセルを変更する」機能を持ちます。
例えばA1:C3セルを選択した状態で以下のコードを実行すると、
A1:C3セルを選択したままアクティブセルをB2に変更します。
Range("B2").Activate

この判定は「対象Rangeの第1セル」によるもののようで、
以下のコードでも同じくB2セルをアクティブセルにする動きになります。
' A1:C3選択下では以下のコードは同じ動き Range("B2").Activate Range("B2:F10").Activate
対してSelectメソッドは純粋な「選択範囲の変更」機能のため、
選択セルをA1:C3からB2に変更します。
Range("B2").Select

使い分け
通常のセル選択にはSelectメソッドを使用し、
アクティブセルの変更時にだけActivateメソッドを使用しましょう。
通常のセル選択にActivateメソッドを使用していると、
現在の選択範囲によって挙動が変わってしまい安定しません。
Activateメソッドは「セル範囲.Activate」というコードは基本使用せず、
「現在のセル範囲内の単独セル.Activate」というコード限定で使用してください。