SheetsコレクションとWorksheetsプロパティの違い
ワークシートを参照する際に、SheetsコレクションやWorksheetsプロパティを利用します。
SheetsとWorksheetsの違いは、Sheetsコレクションはワークシート、グラフシート、マクロシート、ダイアログシートの4種類全てのシートを対象としますが、Worksheetsプロパティはワークシートのみを対象とする点です。
多くの場合はワークシートのみのブックが大半だと思われるため、SheetsでもWorksheetsでも同じ結果が得られるとは思いますが、厳密にワークシートのみに限定したい場合はWorksheetsプロパティを利用します。
以下の2つのコードはどちらも全シートを参照する関数です。SheetsかWorksheetsかの違いだけです。
サンプルコード
Sheetsコレクションを使ったサンプルコードです。
1 2 3 4 5 6 7 |
Sub SheetsTest() Dim sht For Each sht In Sheets Debug.Print sht.Name Next End Sub |
Worksheetsプロパティを使ったサンプルコードです。
1 2 3 4 5 6 7 |
Sub WorksheetsTest() Dim sht For Each sht In Worksheets Debug.Print sht.Name Next End Sub |
実行結果
上の2つの関数の違いは4行目のSheetsとWorksheetsのみですが、実行すると結果が異なります。
2つの関数を以下のようにグラフシート、ワークシート、マクロシート、ダイアログシートの4種類があるブックを用意します。
そして上の2つの関数をそれぞれ実行すると以下のような結果になります。
1つ目(SheetsTest)の結果
Graph1(グラフシート)
Sheet1
Macro1(マクロシート)
Dialog1(ダイアログシート)
Sheet2
2つ目(WorksheetsTest)の結果
Sheet1
Sheet2
この結果の通り、Sheetsコレクションはブックに含まれる全てのシートを対象としますが、Worksheetsプロパティはワークシートのみを対象とします。
SheetsとWorksheetsのどちらを使った方がよいか
ワークシートのみのブックの場合はSheetsとWorksheetsのどちらを使っても構いません。
4種類のシートがあるブックの場合に、ワークシートのみをマクロで処理する場合はWorksheetsプロパティ、そうでない場合はSheetsコレクション、という分け方になります。
なお、私自身はグラフシート、マクロシート、ダイアログシートを使うことが無いことと、将来もまず使わないとわかっているため、Sheetsコレクションを使うことが多いです。
さらに、キーボードの入力がWorksheetsよりもSheetsと書いた方がラクという点もあります。