EXCEL オブジェクトを消す(グラフ、図、...)


Background

VBAでグラフを作る、グラフが固定数であればデータを書き換えて再描画できるが、グラフ数が変わるような場合、前回作ったグラフを消して作る必要がある。
シートには棒グラフと、散布図があり、散布図のみ消したい。
散布図を描くレンジ(セルの場所)は決まっている。

Investigation

オブジェクトの一覧は取得可能
グラフの種類は判定できる
名前に細工すれば消したいオブジェクトを特定できる

出来るだけ少ないステップ数で実現したい
.Select(レンジ).delete
.Select("グラフ種類").delete

オブジェクトの名前は一意でなくて構わない
オブジェクト一覧はシート毎に取得可能
レンジ(セル位置)を指定してオブジェクトを取得する方法は見つけられなかった

What to do

他に方法が見つからなかったので名前で回すことにした。残念
オブジェクトの種類(グラフ)、グラフのタイプ(散布図)など判定できるが、今回は名前のみで消すことにする。
VBAで作ったオブジェクトなので名前は指定できる、グラフをコピーされるなどすると名前が”グラフ1”のように変更されるのでVBAで作成されたグラフのみ消すことができる。

Sample

sample_delete.vbs
'// 表示しているシートで名前が _VBA_GEN_ を消す
Sub sample_delete()
  Dim shp As Shape

  For Each shp In ActiveSheet.Shapes
  If shp.Name = "_VBA_GEN_" Then
    shp.Delete
    End If
  Next shp

End Sub

おまけ散布図の名前変更

sample_name.vbs
'// グラフ 散布図の名前を _VBA_GEN_ に変更
Sub sample_rename()
  Dim shp As Shape

  For Each shp In ActiveSheet.Shapes
  If shp.Type = msoChart And shp.Chart.ChartType = xlXYScatter Then
    shp.Name = "_VBA_GEN_"
    End If
  Next shp

End Sub

Shapes.Type

定数 定義
-2 msoShapeTypeMixed
1 msoAutoShape 図形・オートシェイプ
2 msoCallout 吹き出し
3 msoChart グラフ
4 msoComment コメント
5 msoFreeform フリーフォーム
6 msoGroup グループ化された図形
7 msoEmbeddedOLEObject 埋め込みOLEオブジェクト
8 msoFormControl フォームコントロール
9 msoLine
10 msoLinkedOLEObject リンクOLEオブジェクト
11 msoLinkedPicture リンク画像
12 msoOLEControlObject ActiveXコントロール
13 msoPicture 画像
14 msoPlaceholder プレースホルダー
15 msoTextEffect テキスト効果
16 msoMedia メディア
17 msoTextBox テキストボックス
18 msoScriptAnchor スクリプトアンカー
19 msoTable
20 msoCanvas 描画キャンバス
21 msoDiagram 図表
22 msoInk インク
23 msoInkComment インクコメント
24 msoSmartArt スマートアート
25 msoSlicer スライサー
26 msoWebVideo Webビデオ
27 msoContentApp コンテンツアドイン
28 msoGraphic グラフィック
29 msoLinkedGraphic リンクグラフィック
30 mso3DModel 3Dモデル
31 msoLinked3DModel リンク3Dモデル

Chart.Type

定数 意味
-4098 xl3DArea 3-D 面
78 xl3DAreaStacked 3-D 積み上げ面
79 xl3DAreaStacked100 100% 積み上げ面
60 xl3DBarClustered 3-D 集合横棒
61 xl3DBarStacked 3-D 積み上げ横棒
62 xl3DBarStacked100 3-D 100% 積み上げ横棒
-4100 xl3DColumn 3-D 縦棒
54 xl3DColumnClustered 3-D 集合縦棒
55 xl3DColumnStacked 3-D 積み上げ縦棒
56 xl3DColumnStacked100 3-D 100% 積み上げ縦棒
-4101 xl3DLine 3-D 折れ線
-4102 xl3DPie 3-D 円
70 xl3DPieExploded 分割 3-D 円
1 xlArea
76 xlAreaStacked 積み上げ面
77 xlAreaStacked100 100% 積み上げ面
57 xlBarClustered 集合横棒
71 xlBarOfPie 補助縦棒グラフ付き円
58 xlBarStacked 積み上げ横棒
59 xlBarStacked100 100% 積み上げ横棒
15 xlBubble バブル
87 xlBubble3DEffect 3-D 効果付きバブル
51 xlColumnClustered 集合縦棒
52 xlColumnStacked 積み上げ縦棒
53 xlColumnStacked100 100% 積み上げ縦棒
102 xlConeBarClustered 集合円錐型横棒
103 xlConeBarStacked 積み上げ円錐型横棒
104 xlConeBarStacked100 100% 積み上げ円錐型横棒
105 xlConeCol 3-D 円錐型縦棒
99 xlConeColClustered 集合円錐型縦棒
100 xlConeColStacked 積み上げ円錐型縦棒
101 xlConeColStacked100 100% 積み上げ円錐型縦棒
95 xlCylinderBarClustered 集合円柱型横棒
96 xlCylinderBarStacked 積み上げ円柱型横棒
97 xlCylinderBarStacked100 100% 積み上げ円柱型横棒
98 xlCylinderCol 3-D 円柱型縦棒
92 xlCylinderColClustered 集合円錐型縦棒
93 xlCylinderColStacked 積み上げ円錐型縦棒
94 xlCylinderColStacked100 100% 積み上げ円柱型縦棒
-4120 xlDoughnut ドーナツ
80 xlDoughnutExploded 分割ドーナツ
4 xlLine 折れ線
65 xlLineMarkers マーカー付き折れ線
66 xlLineMarkersStacked マーカー付き積み上げ折れ線
67 xlLineMarkersStacked100 マーカー付き 100% 積み上げ折れ線
63 xlLineStacked 積み上げ折れ線
64 xlLineStacked100 100% 積み上げ折れ線
5 xlPie
69 xlPieExploded 分割円
68 xlPieOfPie 補助円グラフ付き円
109 xlPyramidBarClustered 集合ピラミッド型横棒
110 xlPyramidBarStacked 積み上げピラミッド型横棒
111 xlPyramidBarStacked100 100% 積み上げピラミッド型横棒
112 xlPyramidCol 3-D ピラミッド型縦棒
106 xlPyramidColClustered 集合ピラミッド型縦棒
107 xlPyramidColStacked 積み上げピラミッド型縦棒
108 xlPyramidColStacked100 100% 積み上げピラミッド型横棒
-4151 xlRadar レーダー
82 xlRadarFilled 塗りつぶしレーダー
81 xlRadarMarkers データ マーカー付きレーダー
88 xlStockHLC 高値 - 安値 - 終値
89 xlStockOHLC 始値 - 高値 - 安値 - 終値
90 xlStockVHLC 出来高 - 高値 - 安値 - 終値
91 xlStockVOHLC 出来高 - 始値 - 高値 - 安値 - 終値
83 xlSurface 3-D 表面
85 xlSurfaceTopView 表面 (トップ ビュー)
86 xlSurfaceTopViewWireframe 表面 (トップ ビュー - ワイヤーフレーム)
84 xlSurfaceWireframe 3-D 表面 (ワイヤーフレーム)
-4169 xlXYScatter 散布図
74 xlXYScatterLines 折れ線付き散布図
75 xlXYScatterLinesNoMarkers 折れ線付き散布図 (データ マーカーなし)
72 xlXYScatterSmooth 平滑線付き散布図
73 xlXYScatterSmoothNoMarkers 平滑線付き散布図 (データ マーカーなし)