Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » SheetとSheetsとWorksheetとWorksheets

SheetとSheetsとWorksheetとWorksheets

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

普段とてもしっかりしたVBAの記事を書いてらっしゃるブログ・t-hom's diaryさんで、間違った記述を見かけてしまったので、記事にさせていただきます。

Worksheetsという名称のオブジェクトは存在する

間違っているのは、最後のほうに登場する

Worksheetsという名称のオブジェクトは存在しない。

という記述です。

実際には「Worksheets」という名称のオブジェクトは存在します。

SheetとSheetsとWorksheetとWorksheets

[スポンサードリンク]

Worksheetsオブジェクトのヘルプも存在しています。

SheetとSheetsとWorksheetとWorksheets

SheetとSheetsとWorksheetとWorksheets

SheetとSheetsとWorksheetとWorksheetsについてまとめると以下のとおりです。

名称有無
SheetSheetという名称のオブジェクトは存在しない
SheetsChartオブジェクトやWorksheetオブジェクトを要素オブジェクトとして含むSheetsコレクションが存在
Worksheetワークシートを表すWorksheetオブジェクトが存在
WorksheetsWorksheetオブジェクトを要素オブジェクトとして含むWorksheetsコレクションが(一応)存在

オブジェクトブラウザーを使って確認する

自分の手を動かしてオブジェクトブラウザーで検索を行い、自分の目で確認することをおすすめします。

オブジェクトブラウザー内で右クリックして表示されるショートカットメニューから、[完全に一致する単語だけを検索する]オプションをOnにした状態で、検索を行ってください。

「sheet」を検索すると、下図のように複数のオブジェクトがSheetプロパティを持っていることはわかりますが、Sheetという名前のオブジェクトは存在しません。

SheetとSheetsとWorksheetとWorksheets

「sheets」を検索すると、Sheetsオブジェクトがヒットします。

SheetとSheetsとWorksheetとWorksheets

「Worksheet」を検索すると、Worksheetオブジェクトがヒットします。

SheetとSheetsとWorksheetとWorksheets

この記事のきっかけとなった「Worksheets」を検索すると、Worksheetsオブジェクトがヒットします。

SheetとSheetsとWorksheetとWorksheets

WorksheetsプロパティがSheetsを返すことになっていることが誤解の原因では

オブジェクト式の文法を確実に理解している方がなぜ、

Worksheetsという名称のオブジェクトは存在しない。

という誤解をしてしまったのかですが、WorksheetsプロパティがSheetsを返す作りになっているからかな、と想像しています。

SheetとSheetsとWorksheetとWorksheets

SheetsとWorksheetsという名前の、プロパティとオブジェクトの関係はややこしいので、Worksheetsオブジェクトは存在しないと思ってしまうほうが、理解しやすいと感じる中上級者がいらっしゃるのも、納得できます。

Worksheetsオブジェクト型の変数にWorksheetsプロパティの戻りをセットすることはできない

ちなみに、Worksheetsオブジェクトが存在しているのなら、例えば、

Dim obj as Worksheets
Set obj = Worksheets

のように、Worksheetsオブジェクト型の変数に、Worksheetsプロパティの戻りをセットすることができると考える方もいらっしゃるかもしれませんが、これはダメです。

実行すると、

Set obj = Worksheets

の行で「実行時エラー'13': 型が一致しません。」とエラーが発生します。

Worksheetsプロパティは、Sheetsオブジェクトを返すプロパティとして作られてしまっているからです。

Sheetsクラスは、WorksheetsクラスやChartsクラスをくるんでいるだけのクラスで、Worksheetsプロパティは内部的にはWorksheetsオブジェクトを返しているのではないか、と私は想像しています。

MicrosoftはなぜWorksheetsプロパティの戻りを素直にWorksheetsコレクションオブジェクトにしなかったのか

Worksheetsオブジェクトのヘルプには、
「すべての Worksheet オブジェクトのコレクションです。」
「Worksheets コレクションを取得するには、Worksheets プロパティを使用します。」
といった記述もあるのですから、

SheetとSheetsとWorksheetとWorksheets

Microsoftが、Worksheetsプロパティの戻りを、素直にWorksheetsオブジェクトにしておいてくれれば良かったのに!と感じます。

最終更新日時:2024-04-19 15:27

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » SheetとSheetsとWorksheetとWorksheets

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.