拙著『いちばんやさしいExcel VBAの教本』のLesson 53「コレクションオブジェクトについて学習しましょう」では、WorkbooksとWorksheetsを素材として、コレクション全般について解説を行っています。
あえて初学者向けに解説を避けた、とても重要なコレクションオブジェクトがありますので、ここでお伝えしておきます。
Rangeオブジェクトを単独のオブジェクトとして持つ、Rangeコレクションオブジェクトです。
Rangeはコレクションでもあるオブジェクト
「Rangesコレクションというものはありません」
といった間違った記述を、Webなどで見かけることがありますけれど、Rangeはコレクションでもあるオブジェクトです。
WorkbooksやWorksheetsとの違いは、コレクションと単独のオブジェクトが同じ名前であるという点です。
Workbooksコレクションに含まれる単独のオブジェクトはWorkbook、Worksheetsコレクションに含まれる単独のオブジェクトはWorksheetという名前であるのに対し、Rangeコレクションに含まれる単独のオブジェクトはコレクションと同じRangeという名前です。
コレクションでもあり単独のオブジェクトでもあることが要因の一つとなってRangeは、Excel VBAの中でもっとも利用されるにも関わらず、理解するのがおそらく一番難しいオブジェクトとなっています。
コレクションはCountとItemを持つ
拙著のp.196-197に書いたとおり、コレクションオブジェクトは、含まれる単独オブジェクトの数を返すCountプロパティと、単独のオブジェクトを返すItemプロパティ(またはItemメソッド)を持っています。
Rangeオブジェクトにも、CountプロパティとItemプロパティが用意されています。
例えば、
MsgBox Range("A1:A5").Count
を実行すれば、A1:A5セルを表すコレクションとしてのRangeオブジェクトに含まれる、単独のRangeオブジェクトの数「5」がメッセージボックスに表示されます。
以下のコードを実行すれば、
Dim i As Long
For i = 1 To Range("A1:A5").Count
MsgBox Range("A1:A5").Item(i).Value
Next i
A1:A5セルを表すコレクションとしてのRangeオブジェクトに含まれる、単独のRangeオブジェクトが、Itemプロパティで順番に取得されて、各セルの値がメッセージボックスに表示されます。
「Rangesコレクションというものはありません」
といった間違った説明(?)に、騙されないようにしてください。
Rangeという単語を含むオブジェクトはコレクションのことが多い
ちなみに、Excelに限らずOffice製品の場合「Range」という単語を含むオブジェクトは、コレクションであることが多く、かつ、そのコレクションに含まれる単独のオブジェクトと、似たプロパティ・メソッドを持っていることが、少なくありません。
1つまたは複数の図形を表すShapeRangeオブジェクトはコレクションで、Itemメソッドで取得できる単独のオブジェクトShapeと似たプロパティ・メソッドをかなり持っています。
図形内の文字列範囲を表すTextRange2オブジェクトはコレクションで、Itemメソッドで取得できる単独のオブジェクトもTextRange2オブジェクトです(当然同じプロパティ・メソッドを持っています)。
最終更新日時:2019-03-25 11:38
Home » いちばんやさしいExcel VBAの教本 » Rangeはコレクションでもあるオブジェクト