Excel VBAでRangeオブジェクトを返す「Range」という名前のプロパティには、引数を指定できるものとできないものがあることを、記事にしました。
Rangeプロパティには他にも注意点もあります。Rangeオブジェクトを返さないRangeプロパティも存在する点です。
Shapes・GroupShapesが持つRangeの戻り値はShapeRange
Shapesコレクションや、
GroupShapesコレクションに用意されているRangeプロパティの戻り値は、
Rangeオブジェクトではありません。
オブジェクトブラウザーの詳細ペイン1行目に「As ShapeRange」と表示されているとおり、ShapesコレクションやGroupShapesコレクションの戻り値は、ShapeRangeオブジェクトです。また引数Indexは必ず指定する必要があります。
オブジェクトを返すプロパティはオブジェクト名とプロパティ名が同じ場合も多いが…
拙著『いちばんやさしいExcel VBAの教本』のChapter 8で解説している内容がまだ明確になっていない方の場合、Rangeという名前のプロパティは、必ずRangeオブジェクトを返すと誤解してしまっている方もいらっしゃるかもしれませんが、違います。
2種類に分類できるプロパティのうちオブジェクトを返すプロパティの場合、プロパティの名前と戻り値であるオブジェクトの名前が同じであるケースが、結構あります。しかし絶対にそうなっている、というわけではありません。プロパティ名と戻り値のオブジェクト名が微妙に違うことや、まるで違うこともあります。
Excel VBA入門書で必ず解説されているRangeプロパティは戻り値がRangeオブジェクトです。これは一致している代表例です。
ActiveCellプロパティやCellsプロパティの戻り値もRangeオブジェクトです。ActiveCellやCellsがプロパティ名と戻り値のオブジェクト名がまったく異なる代表例です。プロパティ名と戻り値のオブジェクト名がまったく異なるほうが、そういうものだと割り切って覚えてしまえば済むので、混乱は少ないかもしれません。
この記事で触れている、Shapes.Rangeプロパティ・GroupShapes.Rangeプロパティの場合、戻り値がShapeRangeオブジェクトで、プロパティ名の「Range」という単語が、戻り値であるオブジェクト名「ShapeRange」の中にも含まれてしまっているため、混乱しやすいように私は感じています。
最終更新日時:2022-10-06 10:11
Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » Shapes・GroupShapesが持つRangeはShapeRangeを返す