【Excel VBA】図形のみ一括選択して削除する方法!色やサイズ指定も!

Excel VBAで複数の図形のみ一括選択して削除したいときはないでしょうか。

例えば、あるエクセルシートに画像など図形以外のオブジェクトが含まれていて、その中から図形のみ選択の上、削除をしたいときなどです。

けど、そんな中で悩むことは、

・削除するために図形を一つ一選択しなければならず面倒。
・基本操作やVBAで効率的に行いたいがやり方がわからない。

ですよね。

今回はそんなお悩みを解決する
Excel VBAで図形のみ一括選択して削除する方法について
まとめます!


Excel で図形を削除する基本操作

Excel で図形を削除する基本操作について説明をします。

以下のように図形以外にもチェックボックスや画像など他のオブジェクトが混在しているシートがあり、図形のみ削除をしていきます。

[ホーム]タブから「オブジェクトの選択」を選択する

[ホーム]タブから「オブジェクトの選択」を選択します。

図形のみであれば、「条件を指定してジャンプ」を選択し、選択オプションウインドウの「オブジェクト」を選択し「OK」を押します。

図形の選択ができました。

タカヒロ
タカヒロ
「オブジェクトの選択」をしなくても右クリックで選択可能です。ただしメニューも表示されます。

図形を削除する

削除したい図形を選択したらキーボードのDeleteキーを押します。

削除できましたね。



Excel VBAで複数の図形を選択し、削除する

次はこれまで手動で行ってきた図形の選択と削除をVBAで一度に処理していきます。

処理対象は手動で行ったものと同様です。

シートにあるすべてのオブジェクトから図形のみを選択するVBA

削除を行う上で、シートにあるすべてのオブジェクトから図形のみを選択する処理をおこないます。

VBAは以下の通りです。

Sub 図形のみ一括選択する()
    Dim chkBox As Excel.CheckBox
    Dim objShape As Object
    Dim arr() As String
    ReDim Preserve arr(0)

    '選択シートに存在するオブジェクトを取得します。
    For Each objShape In ActiveSheet.Shapes
    
        arr(UBound(arr)) = objShape.Name
        
        'オブジェクトのタイプが図形であるか判定します。
        If objShape.Type = msoAutoShape Then
        
            '図形オブジェクトの名前を配列に追加します。
            arr(UBound(arr)) = objShape.Name
            
            '値を保持したまま配列を最大インデックスを追加します。
            ReDim Preserve arr(UBound(arr) + 1)
        
        End If
        
    Next
    
    '空の値を削除します。
    ReDim Preserve arr(UBound(arr) - 1)
    
    '図形オブジェクトを選択します。
    ActiveSheet.Shapes.Range(arr).Select

End Sub

マクロメニューの「図形のみ一括選択する」を選択し、VBAを実行します。

はい、図形のみが選択されましたね。


タカヒロ
タカヒロ
VBAの実装方法や実行手順については以下の項目をご参照ください。

VBAの説明

For Eachで選択シートに存在するオブジェクトを取得します。

For Each objShape In ActiveSheet.Shapes

オブジェクトのタイプが図形であるか判定します。

If objShape.Type = msoAutoShape Then

図形オブジェクトの名前を配列に追加します。

タカヒロ
タカヒロ
図形オブジェクト以外の形式も指定ができます。

定数 説明
msoShapeTypeMixed -2
msoAutoShape 図形/オートシェイプ 1
msoCallout 吹き出し 2
msoChart グラフ 3
msoComment コメント 4
msoGroup グループ化された図形 6
msoLinkedPicture リンク画像 11
msoPicture 画像 13
msoTextBox テキストボックス 17
msoTable 19

 

arr(UBound(arr)) = objShape.Name

値を保持したまま配列を最大インデックスを追加します。

ReDim Preserve arr(UBound(arr) + 1)

空の値を削除します。

ReDim Preserve arr(UBound(arr) – 1)

最後に配列にある値の名前委の図形オブジェクトを選択します。

ActiveSheet.Shapes.Range(arr).Select

選択した図形のみを選択し削除するVBA

次は選択した図形を削除していきます。

Sub 図形のみ一括選択して削除する()
    Dim chkBox As Excel.CheckBox
    Dim objShape As Object
    Dim arr() As String
    ReDim Preserve arr(0)

    '選択シートに存在するオブジェクトを取得します。
    For Each objShape In ActiveSheet.Shapes
    
        arr(UBound(arr)) = objShape.Name
        
        'オブジェクトのタイプが図形であるか判定します。
        If objShape.Type = msoAutoShape Then
        
            '図形オブジェクトの名前を配列に追加します。
            arr(UBound(arr)) = objShape.Name
            
            '値を保持したまま配列を最大インデックスを追加します。
            ReDim Preserve arr(UBound(arr) + 1)
        
        End If
        
    Next
    
    '空の値を削除します。
    ReDim Preserve arr(UBound(arr) - 1)
    
    '図形オブジェクトを選択します。
    ActiveSheet.Shapes.Range(arr).Select
    
    '選択オブジェクトを削除します。
    Selection.Delete

End Sub

マクロメニューの「図形のみ一括選択して削除する」を選択し、VBAを実行します。

選択した図形が削除されましたね。

VBAの説明

選択までの処理は上記VBAと同様で、
最後に選択オブジェクトを削除する処理を加えています。

Selection.Delete

赤色の図形のみを選択し削除するVBA

次は図形の塗の色を指定して削除していきます。

RGBカラーコードで指定します。

図形の色は書式設定から確認することができます。

対象の色は赤ですので、RGBは「255.0.0」となります。

タカヒロ
タカヒロ
Rはレッド、Gはグリーン、Bはブルーの意味です。色の濃さは0~255で指定します。
赤はRの一番濃い数字ですので255となります。

以下VBAです。

Sub 赤色の図形のみ一括選択して削除する()
    Dim chkBox As Excel.CheckBox
    Dim objShape As Object
    Dim arr() As String
    ReDim Preserve arr(0)

    '選択シートに存在するオブジェクトを取得します。
    For Each objShape In ActiveSheet.Shapes
    
        arr(UBound(arr)) = objShape.Name
        
        'オブジェクトのタイプが図形であるか判定します。
        If objShape.Type = msoAutoShape And objShape.Fill.ForeColor.RGB = RGB(255, 0, 0) Then
        
            '図形オブジェクトの名前を配列に追加します。
            arr(UBound(arr)) = objShape.Name
            
            '値を保持したまま配列を最大インデックスを追加します。
            ReDim Preserve arr(UBound(arr) + 1)
        
        End If
        
    Next
    
    '空の値を削除します。
    ReDim Preserve arr(UBound(arr) - 1)
    
    '図形オブジェクトを選択します。
    ActiveSheet.Shapes.Range(arr).Select
    
    '選択オブジェクトを削除します。
    Selection.Delete

End Sub

Selection.Delete
手前でブレイクして選択されているか確認します。

はい、赤色の図形のみ選択されていますね。

ブレイクをスキップして削除まで実行しましょう。

はい、削除できましたね。

VBAの説明

選択までの処理は上記VBAと同様です。

色の指定を追加しています。
ForeColor.RGBプロパティが赤色の255.0.0であれば選択対象となる条件にしています。

objShape.Fill.ForeColor.RGB = RGB(255, 0, 0)

図形の高さを指定して選択した図形を削除するVBA

続いて図形の高さであるサイズを指定して一定サイズ以下であれば削除していきます。

図形の高さはVBAではピクセル単位で指定する必要があります。

右クリックのメニューからサイズは確認することはできますが、
センチメートルの単位となりますので、変換が必要となり少々面倒です。

ですので、以下のVBAでピクセル単位のサイズを調べてみます。

Sub 選択オブジェクトのサイズを調べる()
    MsgBox "幅" & Selection.Width & "ピクセル" & vbCrLf & "高さ" & Selection.Height & "ピクセル"
End Sub

今回は一番小さい高さである図形を対象としたいので、その図形を選択して、VBAを実行します。

サイズが表示されましたね。

高さは30.75ピクセルでしたので、31ピクセル以下を条件にサイズを指定し、
図形を削除していきましょう。

以下VBAです。

Sub 高さ指定サイズの図形のみ一括選択して削除する()
    Dim chkBox As Excel.CheckBox
    Dim objShape As Object
    Dim arr() As String
    ReDim Preserve arr(0)

    '選択シートに存在するオブジェクトを取得します。
    For Each objShape In ActiveSheet.Shapes
    
        arr(UBound(arr)) = objShape.Name
        
        'オブジェクトのタイプが図形であるか判定します。
        If objShape.Type = msoAutoShape And objShape.Height <= 31 Then
        
            '図形オブジェクトの名前を配列に追加します。
            arr(UBound(arr)) = objShape.Name
            
            '値を保持したまま配列を最大インデックスを追加します。
            ReDim Preserve arr(UBound(arr) + 1)
        
        End If
        
    Next
    
    '空の値を削除します。
    ReDim Preserve arr(UBound(arr) - 1)
    
    '図形オブジェクトを選択します。
    ActiveSheet.Shapes.Range(arr).Select
    
    '選択オブジェクトを削除します。
    Selection.Delete

End Sub

Selection.Delete
手前でブレイクして選択されているか確認します。

はい、指定サイズの図形のみ選択されていますね。

ブレイクをスキップして削除まで実行しましょう。

はい、削除できました。

VBAの説明

選択までの処理は上記VBAと同様です。

サイズの指定を追加しています。
Heightプロパティで高さを取得し、31ピクセル以下であれば選択対象となる条件にしています。

objShape.Height <= 31

高さのほかに幅「.width」の指定もできます。



VBAの実装手順

実装手順は以下の通りです。

今回はExcel側にこのVBAを実装します。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。
※完了メッセージやステータス管理など必要に応じて実装してもらえばと思います。


さいごに

いかがでしょうか。

今回は、
Excel VBAで図形のみ一括選択して削除する方法について
まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です