和風スパゲティのレシピ

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

ブック内のすべての図形(Shape)を取得/処理する

ブック内にあるすべての図形を取得/処理する方法を解説します。

WorkbookオブジェクトにはShapesプロパティがありませんので、
すべてのシートをFor Eachで回し、Worksheet.Shapesで取得します。

サンプルコード

Sub ブック内のすべての図形を処理する()

    ' すべてのシートをループ
    Dim シート As Worksheet
    For Each シート In ThisWorkbook.Worksheets
        
        ' シート内のすべての図形をループ
        Dim シェイプ As Shape
        For Each シェイプ In シート.Shapes
        
            ' 処理する図形の条件(例:名前がTextBoxから始まる)
            If シェイプ.Name Like "TextBox*" Then
        
                ' 各図形への処理(例:シェイプ名を取得)
                Debug.Print シェイプ.Name
        
            End If
        
        Next
        
    Next

End Sub

解説

すべての図形(Shape)を取得/処理するには、
ShapesコレクションをFor Eachステートメントでループします。


ただしこのShapesコレクションを取得するShapesプロパティは、
Workshetオブジェクトにはありますが、Workbookオブジェクトにはありません。

よって、For Eachステートメントですべてのシートをループし、
そのシート内でさらにすべての図形をFor Eachで取得
してください。


なお、Shapeには図形(オートシェイプ)の他に、
画像(Picture)グラフ(ChartObject)も含まれてしまいます。


特定の図形だけをループしたい場合は、

  • Shape.Typeで図形の種類を判定
  • Shape.Nameで図形の名前を判定
  • Shape.Top/Leftで図形の位置を判定

などのプロパティを用いてIf文を書いてください。

www.limecode.jp



また、「グラフが含まれる」というのも注意しなければいけない点なのですが、
それ以上に危ないのが、なんとドロップダウンリストの▼マークもShapeです。

この罠に引っかからないようご注意ください。


詳しくはこちらの記事をどうぞ。
www.limecode.jp