shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】選択しているオートシェイプの図形と同じタイプを一括で選択(複数タイプ可)

前回、VBAで選択しているオブジェクトと同じタイプを一括で選択する方法を記載しました。この方法は、

  • 一括選択したいオブジェクトのタイプが一つのみで、複数タイプに対応していない
  • オートシェイプの図形の詳細な分類に対応していない

という仕様だったので、上記課題に対応したVBAの備忘録。

事例の前提

VBAで選択しているオブジェクトと同じタイプを一括で選択する方法ですが、修正前の詳細な前提、背景は以下のとおりです。

shikumika.org

VBAサンプル

Sub 複数選択して同じタイプの図形選択() 'AutoShapeTypeで判定'
    Dim 図形 As Shape
    Dim 選択した全ての図形タイプ As Collection
    Dim 選択した図形 As ShapeRange
    Dim シェイプタイプ As Variant

    Set 選択した図形 = Selection.ShapeRange
    Set 選択した全ての図形タイプ = New Collection

    ' 選択している全てのオブジェクトのタイプを取得'
    On Error Resume Next
    For Each 図形 In 選択した図形
        選択した全ての図形タイプ.Add 図形.AutoShapeType, CStr(図形.AutoShapeType)
    Next 図形
    On Error GoTo 0

    ' 同じタイプのオブジェクトを選択'
    For Each シェイプタイプ In 選択した全ての図形タイプ
        For Each 図形 In ActiveSheet.Shapes
            If 図形.AutoShapeType = シェイプタイプ Then
                図形.Select Replace:=False
            End If
        Next 図形
    Next シェイプタイプ
End Sub

事例の補足説明

同じタイプの判定は、次の「AutoShape オブジェクトの図形のタイプ」で判定しています。なお参考ですが、テキストボックスは、四角形と同じmsoShapeRectangle(1  四角形)の分類です。

learn.microsoft.com

 

以上、Excel VBAで、選択しているオートシェイプの図形と同じタイプを一括で選択する方法でした。