Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » ChartObjects経由のChartとShapes経由のChartは同じなのか

ChartObjects経由のChartとShapes経由のChartは同じなのか

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

最近のExcelでVBAから埋め込みグラフを操作するのに、2系統のオブジェクトモデルを利用できます。

ChartsObjectsメソッドでChartObjectオブジェクトを取得してChartObject.Chartプロパティ経由で取得する方法と、

Excel.ChartObject.Chart

ShapesコレクションからShapeオブジェクトを取得してShape.Chartプロパティ経由で取得する方法の

Excel.Shape.Chart

2系統です。

この2系統で取得したChartオブジェクトについて、あらためてテストをしてみました。

[スポンサードリンク]

ChartObjects(1)とShapes(1)は異なる

アクティブなワークシートに埋め込みグラフが存在し、他には図形が存在しない状態で、以下のSubプロシージャを実行しました。

Sub ChartObjectとShapeのChartは同じなのか()
 Dim cho As ChartObject
 Set cho = ActiveSheet.ChartObjects(1)

 Dim shp As Shape
 Set shp = ActiveSheet.Shapes(1)

 Debug.Print shp Is cho
 Debug.Print ObjPtr(cho)
 Debug.Print ObjPtr(shp)

End Sub

Worksheet.ChartObjectsメソッドの戻り値と、Worksheet.Shapes.[_Default]の戻り値を、オブジェクト変数に代入しておいて、
  Set cho = ActiveSheet.ChartObjects(1)
  Set shp = ActiveSheet.Shapes(1)

Is演算子で比較した結果と、
  Debug.Print shp Is cho

それぞれのメモリ番地を出力しています。
  Debug.Print ObjPtr(cho)
  Debug.Print ObjPtr(shp)

結果は以下のとおりです。

False
680047016
676325224

人間が操作する対象としては同じものですが、ActiveSheet.ChartObjects(1)で取得したChartObjectオブジェクトと、ActiveSheet.Shapes(1)で取得した埋め込みグラフを表すShapeオブジェクトは、別のオブジェクトと認識されています。

ChartObjects(1).ChartとShapes(1).Chartは同じ

つづいて先ほどのSubプロシージャにコードを追加して、以下のように変更してから再度実行します。

Sub ChartObjectとShapeのChartは同じなのか()
 Dim cho As ChartObject
 Set cho = ActiveSheet.ChartObjects(1)

 Dim shp As Shape
 Set shp = ActiveSheet.Shapes(1)

 Debug.Print shp Is cho
 Debug.Print ObjPtr(cho)
 Debug.Print ObjPtr(shp)

 Debug.Print shp.Chart Is cho.Chart
 Debug.Print ObjPtr(cho.Chart)
 Debug.Print ObjPtr(shp.Chart)

End Sub

先ほどのオブジェクト変数からChartオブジェクトを取得してIs演算子で比較した結果と、
  Debug.Print shp.Chart Is cho.Chart

それぞれのメモリアドレスを出力しています。
  Debug.Print ObjPtr(cho.Chart)
  Debug.Print ObjPtr(shp.Chart)

今度の結果は以下のとおりです。

False
680047016
676325224
True
672842568
672842568

ActiveSheet.ChartObjects(1).Chartで取得したChartオブジェクトと、ActiveSheet.Shapes(1).Chartで取得したChartオブジェクトは、同じオブジェクトと認識されています。

最終更新日時:2021-09-03 11:11

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » グラフ・Chart » ChartObjects経由のChartとShapes経由のChartは同じなのか

「グラフ・Chart」の記事一覧

検索


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

.