エクセルシート上のオブジェクト(図形・画像・グラフ等)の件数を数える方法(Excel VBA)

【本日のミッション】

エクセルのアクティブシートのオブジェクト(図形・画像・グラフ等)の件数を数えよ。

ミッションの概要

エクセルのアクティブシートのオブジェクト(図形・画像・グラフ等)の件数を数えよ、というのが今回のミッションです。

↓↓↓↓↓↓↓↓↓

■■■スポンサーリンク■■■

プロシージャ

オブジェクトの件数を数えるシートをアクティブにした状態で、Alt+F11でVsual Basic Editerを起動します。

[挿入]-[標準モジュール]で新規モジュールを作成し、下記の通りコードを記入します。

Sub オブジェクトカウント()
    '【変数】
    Dim shp As Shape    'オブジェクト
    Dim cht_ct As Long  'グラフオブジェクト数
    Dim pct_ct As Long  '画像オブジェクト数
    Dim asp_ct As Long  '図形オブジェクト数

    '■アクティブシート内のオブジェクトを順に処理
    For Each shp In ActiveSheet.Shapes
    
        '■グラフオブジェクトカウント
        If shp.Type = msoChart Then
            cht_ct = cht_ct + 1
            
        '■画像オブジェクトカウント
        ElseIf shp.Type = msoPicture Then
            pct_ct = pct_ct + 1
            
        '■図形オブジェクトカウント
        ElseIf shp.Type = msoAutoShape Then
            asp_ct = asp_ct + 1
        End If
    Next shp
    
    '■オブジェクトカウント結果発表
    MsgBox "グラフオブジェクト:" & cht_ct & "件" & Chr(10) & _
        "画像オブジェクト:" & pct_ct & "件" & Chr(10) & _
        "図形オブジェクト:" & asp_ct & "件"d If    
End Sub

記入したプロシージャ(Sub~End Subまで)のどこかにカーソルを置いてF5キーをクリックしてください。

アクティブシートのグラフ・画像・図形オブジェクトの件数を数え、ダイアログ表示します。

■■■スポンサーリンク■■■

For Eachとは

For Each 変数 In コレクション
    ***処理***
Next 変数  

とすることで、コレクションの中にあるもの1つ目から順に変数に入れて、Nextまでの処理を行い、コレクション内にあるもの全ての処理が終わったらNext以降の処理に移ります。

ActiveSheet.Shapesは、アクティブシート内のShapeコレクションオブジェクト全てのことです。その1つ目から順に変数「shp」として処理していきます。

全てのShapeコレクションオブジェクトの処理が済んだら、For Eachを抜けて次の処理に移ります。

Dim shp As Shape     'オブジェクト

For Each shp In ActiveSheet.Shapes
    ***shpを使用する処理***
Next shp

Shape.Typeプロパティ

Shapeオブジェクトが、どの種類のオブジェクトか判定するのに、下記Typeプロパティを使用します。よく使用頻度の高いTypeのみ記載しておきます。

定数説明
msoAutoShape1図形・オートシェイプ
msoCallout2吹き出し
msoChart3グラフ
msoComment4コメント
msoFreeform5フリーフォーム
msoGroup6グループ化された図形
msoFormControl8フォームコントロール
msoLine9
msoLinkedPicture11リンク画像
msoPicture13画像
msoTextBox17テキストボックス
msoCanvas20描画キャンバス
msoSmartArt24スマートアート

今回はShapeオブジェクトのタイプが、

グラフ「msoChart」の時は、変数「cht_ct」
画像「msoPicture」の時は、変数「pct_ct」
図形「msoAutoShape」の時は、変数「asp_ct」

でオブジェクトの個数を数えるようにしています。

変数に入れた個数を、ダイアログ表示しています。

'■グラフオブジェクトカウント
If shp.Type = msoChart Then
    cht_ct = cht_ct + 1
            
'■画像オブジェクトカウント
ElseIf shp.Type = msoPicture Then
    pct_ct = pct_ct + 1
            
'■図形オブジェクトカウント
ElseIf shp.Type = msoAutoShape Then
    asp_ct = asp_ct + 1
End If

参照

系列が1つのグラフを自動大量連続作成(Excel VBA)
「実行時エラー 1004」を出さずに、ワークシート内のグラフを「グラフ 元」以外全て削除(Excel VBA)
グラフの参照先を変えると勝手にグラフの色が変わる現象を解決せよ
系列が複数あるグラフを自動大量連続作成(Excel VBA)
n行毎の改ページ設定 「実行時エラー1004 RangeクラスのPageBreakプロパティを設定できません」の原因(Excel VBA)
参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
複数系列・参照データ数が異なる・参照先が変動する月別グラフを自動大量連続作成(Excel VBA)
大量の画像やグラフ等のオブジェクトで画面表示が遅いのを解決(Excel)
エクセル シートに画像が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセルシート上 全てのオブジェクト(画像・図形・グラフ等)を選択し、削除する(Excel VBA)
エクセルシート上のオブジェクト(図形・画像・グラフ等)の件数を数える方法(Excel VBA)

■■■スポンサーリンク■■■