和風スパゲティのレシピ

日本語でコーディングするExcelVBA

図形(Shape)の種類を調べる - Typeプロパティ

シート上の図形やオブジェクトの種類を調べる、Typeプロパティを解説します。

基本構文

Dim 図形 As Shape
Set 図形 = Worksheets("○○").Shapes("シェイプ名")

Debug.Print 図形.Type ' 図形の種類が数値で表示されます。

Typeプロパティの返り値一覧

Shapeとして取得できる図形の種類には、
以下に示す通りグラフやフォームコントロールも含まれています。

返り値 定数名 図形の種類
-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モデル

サンプルコード(シート内のテキストボックスだけを削除)

例えばシート内のテキストボックスだけを削除する場合は、
以下のコードを実行します。

' シート内のすべてのテキストボックスを削除する
Dim シェイプ As Shape
For Each シェイプ In Worksheets("○○").Shapes

    If シェイプ.Type = msoTextBox Then
        シェイプ.Delete
    End If
    
Next

Typeを判別して特定の図形にのみ処理を行いたい場合は、
上記のようなコードを使用してください。


なお注意点として、選択中の図形をSelectionで取得した場合は、
対象はShapeではなくDrawingObjectという型で取得されます。

DrawingObjectにはTypeプロパティがありませんので、
ShapeRangeプロパティを使用し、ShapeにしてからTypeを調べてください。

' 選択中の図形がテキストボックスであれば削除する
If Selection.ShapeRange.Type = msoTextBox Then
    Selection.Delete
End If
' 選択したすべての図形のうちテキストボックスを削除する
Dim シェイプ As Shape
For Each シェイプ In Selection.ShapeRange
    
    If シェイプ.Type = msoTextBox Then
        シェイプ.Delete
    End If

Next