【ExcelVBA】シート上のシェイプやコントロール全ての名前や種類を取得するには

この記事では、シート上のシェイプやコントロール全ての名前や種類を取得する方法についてご説明します。

【動画】シート上のシェイプやコントロール全ての名前や種類を取得する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


ShapeオブジェクトのNameプロパティとAutoShapeTypeプロパティでシェイプやコントロール全ての名前や種類を取得しています。

なお、AutoShapeTypeプロパティで種類される値は数値ですが、その数値だけだとどのシェイプやコントロールなのか特定しにくいので、次のページの対応表を見ると特定しやすくなるのでそちらも参照してください。

参考 MsoAutoShapeType 列挙 (Office)microsoft

マクロ作成の流れ

STEP.1
ShapeオブジェクトのNameプロパティでシェイプやコントロールの名前を取得する
ShapeオブジェクトのNameプロパティでシェイプやコントロールの名前を取得します。
STEP.2
ShapeオブジェクトのAutoShapeTypeプロパティでシェイプやコントロールの種類を取得する
ShapeオブジェクトのAutoShapeTypeプロパティでシェイプやコントロールの種類を取得します。
STEP.3
シェイプやコントロールの数だけSTEP.1とSTEP.2を繰り返す
シェイプやコントロールの数だけSTEP.1とSTEP.2を繰り返します。

コードの例

Excelのマクロのコード(例)

Option Explicit

Sub test()

    Dim obj As Object       'シェイプ・コントロール用変数
    Dim cnt As Integer      'カウンタ
    
    'カウンタを初期化する
    cnt = 2

    With Worksheets("work")
    
        'シート「work」上のシェイプ・コントロールの数分だけループ
        For Each obj In .Shapes
        
            'シェイプ・コントロールに付けられた名前を取得する
            .Range("A" & cnt).Value = obj.Name
            
            'シェイプ・コントロールの種類を取得する(数値で取得)
            .Range("B" & cnt).Value = obj.AutoShapeType
            
            cnt = cnt + 1
        
        Next obj

    End With

End Sub

注目すべきコード①

最初に見て頂きたいのは20行目です。

    With Worksheets("work")
    
        'シート「work」上のシェイプ・コントロールの数分だけループ
        For Each obj In .Shapes

以上のコードは、シェイプやコントロールの数だけループ処理を行うコードです。

例えば、シェイプやコントロールが10個あれば、10回ループを繰り返します。

注目すべきコード②

次に見て頂きたいのは20行目です。

            'シェイプ・コントロールに付けられた名前を取得する
            .Range("A" & cnt).Value = obj.Name
            
            'シェイプ・コントロールの種類を取得する(数値で取得)
            .Range("B" & cnt).Value = obj.AutoShapeType

以上のコードは、ShapeオブジェクトのNameプロパティとAutoShapeTypeプロパティでシェイプやコントロールの名前と種類を取得してセルに出力しているコードです。

Nameプロパティには、手動で名前を設定している場合にはその名前が、デフォルトのままの場合はシェイプまたはコントロールを配置したタイミングで自動で設定される名前がNameプロパティに設定されています。

動作確認

マクロ実行前

今回用意したExcelファイルは以下の通りシェイプとコントロールが配置されています。

マクロ実行後

マクロを実行すると、配置されたシェイプとコントロールの名前と種類がセルに出力されました。

なお、種類については数値で出力されるのでどのシェイプやコントロールなのか特定しにくいです。

なので、次のページの対応表を見るとどのどのシェイプやコントロールなのかが特定しやすくなるのでそちらも参照してください。(いちいちリンク先の対応表を見て確認するのは面倒だと思いますが。。)

参考 MsoAutoShapeType 列挙 (Office)microsoft

最後に

本記事では、シート上のシェイプやコントロール全ての名前や種類を取得する方法についてご説明しました。

シェイプやコントロールが表示されているシート上だけに配置されているなら良いのですが、表示されていないシート上にシェイプやコントロールが配置されている場合はいちいち画面をスクロールさせないと特定できないので面倒ですよね。

なので、シェイプやコントロール全てを把握したい場合に今回のマクロが役に立つかもしれないので参考にしてみてくださいね。

Excelのスキル向上やExcelの基礎知識をしっかりと学びたいなら

Excelのスキルを習得したい、Excelの基礎知識をもっと理解したい、そう考えているなら「無期限サポート付きExcel講座【すごい改善】」がおすすめです。

Excelのスキルの基礎を身につけるなら【すごい改善】で無期限サポート付きがあるので、これで「Excelのスキルや基礎」を学ぶのにおすすめですよ。

→ 受講後、何度でも無期限でメールで質問できるアフターサポートがついているExcelマスター講座はこちら