Select と Activate の違い

中級VBA

はじめに

 Select と Activate はブック、シート、セル(Range)オブジェクトで使用できるメソッドになります。
 Selectは単に選択するメソッドなので複数選択できます。それに対して、Activate は画面に表示されている状態になります。
 このためブックやシートでは1つに限られ、セル(Range)に関しては Select も Activate も同じように動作するようです。

 今回は良く使うシートで説明します。
 シートの場合、Select と Activate の大きな違いは2つあります。
 ・Select は複数選択できますが、Activateは1つのみ
 ・Select は非表示の際に実行するとエラーとなるが、Activateはエラーとならない

 コードで確認してみましょう。

Select は複数選択できますが、Activateは1つのみ

 以下のコードでは、最初にSheet1とSheet2を複数選択(Select)し、その後、ActivateでSheet1をアクティブにしています。

Sub my_active1()
    Worksheets(Array("Sheet1", "Sheet2")).Select
    Worksheets("Sheet1").Activate
End Sub

 結果は以下の通り、複数選択されたまま、Sheet1がアクティブになっています。

 次のコードでは、Sheet1だけが選択されてアクティブになります。

Sub my_active2()
    Worksheets(Array("Sheet2", "Sheet1")).Select
    Worksheets("Sheet1").Activate
End Sub

 この事から、複数選択した場合、Arrayの最初の要素がアクティブな状態で選択され、それがアクティブになっても何も起こりませんが、別のシートをアクティブにすると他のシートの選択は解除される事がわかります。

 因みに、シートを1つだけ選択、またはアクティブにする場合は、どちらも同じ挙動となりますのでどちらを使っても構いません。

シートの非表示属性で起こるエラー

 シートが非表示属性となっている場合、Selectを実行すると実行時エラーが発生しますが、Activateは実行してもエラーとならず別のシートがアクティブな状態となります。

Sub my_Select1()
    Worksheets("Sheet1").Visible = False
    Worksheets("Sheet1").Select     '実行時エラー
End Sub
Sub my_Select2()
    Worksheets("Sheet1").Visible = False
    Worksheets("Sheet1").Activate     'エラーにならない
End Sub

 エラーが出ないActivateの方が便利に思えるかもしれませんが、プログラムによっては確実に目的のシートが選択されていないと困る場合が多いので、目的のシートが非表示となる事がある場合は対策が必要になります。

まとめ

 Select と Activate は条件が合えば同じような使い方となります。
 条件とは、以下の通りです。
 
 ・1つのシートである事
 ・そのシートが非表示でない事

 特に注意したいのは、非表示のシートでSelectを実行するとエラーとなる事。更にActivateでは、別のシートがアクティブになってしまうという点です。

 もし条件をクリアできるなら同じように使って構わないという事を覚えておきましょう。

タイトルとURLをコピーしました