Excelでワークシートを選択する場合にSelectではなくActivateを使った方がよい理由

Excel VBAのおぼえがきです。

Rangeの選択の前にWorksheetの選択が必要

Rangeオブジェクトを選択(Select)する場合、先にそのRangeがあるWorksheetオブジェクトを選択しておく必要があります。選択しておかないと「Range クラスの Select メソッドが失敗しました」というエラーが表示されます。
たとえばSheet1が選択されているとき、Sheet2のA1セルを選択するとエラーになります。

Sheet2.Range("A1").Select


Worksheetの選択メソッドは2種類ある

そこで、Rangeを選択する前にWorksheetオブジェクトを選択します。Worksheetオブジェクトを選択する場合、次の2種類のメソッドがあります。

  1. Worksheet.Select
  2. Worksheet.Activate

通常はこのどちらでもWorksheetを選択できます。
しかし、非表示のWorksheetに対してはActivateのみが使用できます。非表示のWorksheetにSelectした場合には「アプリケーション定義またはオブジェクト定義のエラーです」というエラーが表示されます。

Sheet2.Visible = xlSheetHidden
Sheet2.Activate 'これはOK
Sheet2.Select   'これはエラー

これを考えると、ワークシートを選択するにはActivateメソッドを使った方がよりよい(無用のエラーに遭遇する機会が減る)といえます。

すべてのワークシートを選択するにはSelectを使う

逆に、すべてのワークシートを選択する場合には、ActivateではなくSelectを使います。Worksheets.Selectと書きます。

Worksheets.Select 'すべてのワークシートを選択する

Worksheets.Selectを使う場合、すべてのワークシートが表示されている必要があります。非表示のワークシートがある場合、上記と同様に「アプリケーション定義またはオブジェクト定義のエラーです」というエラーが表示されます。

余談:非表示のワークシートをActivateしたときの選択シートは?

非表示のワークシート(Sheet2)をActivateで選択したとき、画面上ではその次のシート(Sheet3)が選択されていました。

画面上では見えているシートが選択されている必要があるため、次の(非表示でない)シートが選択されるようです。