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

SheetとSheetsとWorksheetとWorksheets

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

普段とてもしっかりしたVBA(Visual Basic for Applications)の記事を書いてらっしゃるブログ・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オブジェクトにしておいてくれれば良かったのに!と感じます。

[スポンサードリンク]

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

TrackBack:0

TrackBack URL

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

「Sheets・Worksheet」の記事一覧

検索


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

.