Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » Shapes.Range.Countで図形の個数は取得できない??

Shapes.Range.Countで図形の個数は取得できない??

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2106 ビルド14131.20278 Microsoft Store)

「vba shapes.range.count」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。

判断に迷う検索ですが、シート上に存在している図形(Shapeオブジェクト)の個数を取得するには、どのようなコード書けばいいのか探していた方による検索ではないか、と推測しています。

マクロ記録すると「ActiveSheet.Shapes.Range」といったコードが

Excelでワークシート上の四角形を選択する操作をマクロ記録すると、
  ActiveSheet.Shapes.Range(Array("Rectangle 1")).Select
といったコードが自動的に作られます。

このコードを元にした
  MsgBox ActiveSheet.Shapes.Range.Count
で、アクティブシート上の図形の個数がメッセージボックスに表示されるだろうと予想して実行したところ、

実行時エラー '450':
引数の数が一致していません。または不正なプロパティを指定しています。

となってしまったのではないかと、私は想像しています。

図形の個数を取得するサンプル

図形の個数を取得するなら、以下のようなコードです。

Sub 図形の個数を取得する()
 MsgBox ActiveSheet.Shapes.Count
End Sub

Shapesオブジェクトはコレクションであり、要素である単独のShapeオブジェクトの個数を取得するためのCountプロパティが用意されています。

Excel.Shapes.Count

もしもShapes.Rangeの定義が異なっていれば

マクロ記録で自動的に作られたコード
  ActiveSheet.Shapes.Range(Array("Rectangle 1")).Select
で使用されている、ShapesコレクションのRangeプロパティは、オブジェクトブラウザーの詳細ペインで確認できるとおり戻り値はShapeRangeオブジェクトです。

Excel.Shapes.Range

Shapes.Rangeプロパティに指定できる引数は「(Index)」と表示されています。「([Index])」のように[ ]で括られていませんから、引数Indexを必ず指定する必要があります。Shapes.Rangeプロパティには引数を必ず指定する必要があるため、
  MsgBox ActiveSheet.Shapes.Range.Count
といったコードでは、

実行時エラー '450':
引数の数が一致していません。または不正なプロパティを指定しています。

となってしまいます。

もしも引数が、「([Index])」のように省略可能な形で、Shapes.Rangeプロパティが作られていれば、
  MsgBox ActiveSheet.Shapes.Range.Count
で、実行時エラーになることもなく図形の個数を取得できただろう、と私は妄想しています。

ShapeRangeオブジェクトにもCountプロパティは用意されていますから。

Excel.ShapeRange.Count

最終更新日時:2021-12-30 05:52

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » Shapes.Range.Countで図形の個数は取得できない??

「Shapesコレクション・Shapeオブジェクト」の記事一覧

検索


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

.