和風スパゲティのレシピ

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

すべての図形(Shape)に同じ処理を行う - Shapes

すべての図形(Shape)に同じ処理を行う方法を解説します。

WorksheetオブジェクトのShapesプロパティでシート上の図形を取得し、
For Eachステートメントで順番に処理します。

基本構文

For Each 対象Shape In 対象シート.Shapes
    ' ここに対象Shapeへの処理
Next

サンプルコード

Dim ws対象シート As Worksheet
Set ws対象シート = Worksheets("○○")

' すべての図形を赤色で塗りつぶし
Dim 対象図形 As Shape
For Each 対象図形 In ws対象シート.Shapes
    対象図形.Fill.ForeColor.RGB = vbRed
Next

' すべての図形を右へ10pt移動
For Each 対象図形 In ws対象シート.Shapes
    対象図形.IncrementLeft 10
Next

' テキストボックスだけを非表示
For Each 対象図形 In ws対象シート.Shapes
    If 対象図形.Type = msoTextBox Then
        対象図形.Visible = msoFalse
    End If
Next

解説

シート上にあるすべての図形を取得するには、
WorksheetオブジェクトのShapesプロパティを使用します。

このプロパティで全Shapeをコレクションとして取得できますので、
For Eachステートメントを使って中身をループして処理します。


特定の種類の図形だけを処理したい場合は、
サンプルのようにFor Eachループ内で条件分岐を記載します。

' テキストボックスだけを非表示
For Each 対象図形 In ws対象シート.Shapes
    If 対象図形.Type = msoTextBox Then
        対象図形.Visible = msoFalse
    End If
Next

 
この条件には「図形の種類」「シェイプの種類」「図形名」「図形内テキスト」などを使用できます。

これらのサンプルコードはこちらの記事をご覧ください。