Home » いちばんやさしいExcel VBAの教本 » Worksheetsで取得したコレクションはオブジェクト変数への代入時に戸惑うの意味

Worksheetsで取得したコレクションはオブジェクト変数への代入時に戸惑うの意味

対象:Excel 2010, Excel 2013, Windows版Excel 2016

2018年1月17日に発売となった拙著『いちばんやさしいExcel VBAの教本』の279ページに「WorksheetsプロパティはSheetsコレクションを返す」というワンポイントを書きました。

Excelマクロで、RangeプロパティやCellsプロパティにつづいて見かけることの多い、Worksheetsプロパティに関連するコラムです。

このワンポイントに以下のような一文があります。
引数を指定しないWorksheetsプロパティで取得したコレクションオブジェクトをオブジェクト変数に代入しようとしたときには戸惑うはずですが、その時点で正しく学び直しをすれば十分です。

この文章が何をいっているのか、よくわからないExcel VBA経験者もいらっしゃると思いますので、補足しておきます。

Worksheetsプロパティの戻りの代入で実行時エラーが発生するサンプルマクロ

「引数を指定しないWorksheetsプロパティで取得したコレクションオブジェクトをオブジェクト変数に代入しようとしたときには戸惑うはず」
とは、以下のようなコードを実行したときの話です。
Sub Worksheetsプロパティの戻りを確認する()
 Dim obj As Worksheets
 Set obj = Worksheets
End Sub

このコードを読んだだけでは何が問題なのか、わからない方もいらっしゃるかもしれませんが、このSubプロシージャは実行時エラーが発生します。

Worksheetsで取得したコレクションはオブジェクト変数への代入時に戸惑う

Worksheetsプロパティの戻りは、Worksheetsコレクションオブジェクトではないにも関わらず、Worksheetsオブジェクト型で宣言された変数objに代入が行われようとしているため、「型が一致しません。」実行時エラーが発生します。

この状態を拙著では
「引数を指定しないWorksheetsプロパティで取得したコレクションオブジェクトをオブジェクト変数に代入しようとしたときには戸惑うはず」
と書いています。

『インストラクターのネタ帳』でも「SheetとSheetsとWorksheetとWorksheets」で言及している内容です。

Worksheetsプロパティの戻りの代入で実行時エラーが発生しないサンプルマクロ

先のSubプロシージャを以下のように修正すると、実行時エラーは発生しなくなります。
Sub Worksheetsプロパティの戻りを確認する()
 ' Dim obj As Worksheets
 Dim obj As Sheets
 Set obj = Worksheets
End Sub

オブジェクトブラウザー等で確認すればわかるとおり、Worksheetsプロパティの戻りはSheetsコレクションオブジェクトです(このWorksheetsプロパティで返されたSheetsコレクションオブジェクトには、Worksheetオブジェクトだけが含まれています)。

Worksheetsで取得したコレクションはオブジェクト変数への代入時に戸惑う

ですから、オブジェクト変数をWorksheets型ではなく、Sheets型で宣言しておけば、
  ' Dim obj As Worksheets
  Dim obj As Sheets

Worksheetsプロパティの戻りを代入しても、
  Set obj = Worksheets

実行時エラーは発生しません。

入門者は当面、この記事を忘れてください

ワンポイント「WorksheetsプロパティはSheetsコレクションを返す」に、
入門者がWorksheetsプロパティについて、最初から正しい形で理解しようとすると、難易度が非常に上がり、その後のマクロ学習のスピードを落とすことにもなります。

と書いたとおり、Excel VBA入門者がこの記事で書いている内容を最初から理解しようとすると、きっと混乱してしまいます。

拙著に限らず「WorksheetsプロパティはWorksheetsコレクションオブジェクトを返す」と、厳密には正しくない解説を行っているExcel VBA書籍のほうをよく見かけるはずです。

当面は、この記事の内容は忘れておくほうがイイでしょう。

プログラミング経験がなく、拙著ではじめてExcel VBAにチャレンジする方の場合、この記事の内容を理解できるようになるには、かなり早い方であっても数か月後になるはずです。

最終更新日時:2020-06-16 17:06

[スポンサードリンク]

Home » いちばんやさしいExcel VBAの教本 » Worksheetsで取得したコレクションはオブジェクト変数への代入時に戸惑うの意味

「いちばんやさしいExcel VBAの教本」の記事一覧

検索


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

.