マクロ基礎講座ワークシートを参照する
ワークシートを参照する方法
ワークシートを参照するWαksheetsプロパティ
ワークシートを参照するには、
Wαksheetsプロパティを使ってワークシート名を指定します。
またはワークシー卜の左から(左から)何番目にあるかという
インデックス番号を指定して参照することができます。
アクティブシートを参照するには、ActiveSheetプロパティを使います。
ワークシートを参照するコード
1. Sheet2のワークシートを参照してみましょう。
参照したいワークシートのインデックス番号2を指定しています。さらに、参照してSelectで選択しています。
選択すると、ワークシートはアクティブになるので、こんどは ActiveSheetを使って参照します。
Sub ワークシートを参照する() Worksheets(2).Select ActiveSheet.Name = Range("A1").Value End Sub
2. こんどは、Sheet1を参照してみましょう。
今度は参照したいワークシートの名前Sheet1を指定して選択するのではなく、アクティブにしています。
Sub 名前でワークシートを参照する() Worksheets("Sheet1").Activate End Sub
Worksheet.Selectと.Activateの違いは?
3. SelectとActivateは、実行した結果がよく似ているメソッドです。何が違うのでしょうか?
どちらのメソッドもアクティブシートを設定したり変更したりすることができるメソッドで、この部分だけを比較すると同じように見えます。
ところが、
SelectとActivateは親オブジェクトが異なります。
Selectメソッドの親オブジェクトはセルのRangeオブジェクトと、ワークシートのWorksheetオブジェクトの2つです。
一方、Activateメソッドの親オブジェクトはセルのRangeオブジェクト、ワークシートのWorksheetオブジェクト、ブックのWorkbookオブジェクト、そしてウィンドウのWindowオブジェクトと、なんと4つの親オブジェクトを持っています。
別ブックを選択する時のSelectと.Activateの違い
4. では、親オブジェクトが違うと二つのメソッドにどんな差が出てくるのでしょうか?
たとえば、Book1.xlsmという別ブックのSheet1をアクティブにしたい時にはどうでしょうか?
SelectとActivateを使用中のSheet1を選択するのと同様に以下のように記述したとします。
こちらはOKです。それはWorkbookオブジェクトは、Activateメソッドを持っているからです。
Workbooks("Book1.xlsm").Worksheets("Sheet1").Activate
下のコードはエラー、事前にブックBook1.xlsmをアクティブにしてからでないとSelectできません。
Workbooks("Book1.xlsm").Worksheets("Sheet1").Select ' エラー
Selectでコードを書きたければ、このように書く必要があります。