エクセル シートにグラフが存在するかどうか(有無)を調べる方法(Excel VBA)

【本日のミッション】

エクセルのアクティブシートに、グラフが存在するかどうか(有無)を調べよ

ミッションの概要

エクセルのアクティブシートに、グラフが存在するかどうか(有無)を調べるのが、今回のミッションです。

アクティブシートに色々な種類のオブジェクトが存在する中、「グラフ」が存在するかどうかを判定します。

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

プロシージャ

グラフの有無を判定するシートをアクティブにした状態で、Alt+F11でVsual Basic Editerを起動します。

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

Sub シートのグラフ有無の確認()
    '【変数】
    Dim shp As Shape    'オブジェクト
    Dim shp_ct As Long  'グラフオブジェクト数

    '■アクティブシート内のオブジェクトを順に処理
    For Each shp In ActiveSheet.Shapes
    
        '■オブジェクトがグラフか判定
        If shp.Type = msoChart Then
            shp_ct = shp_ct + 1
        End If
    Next shp
    
    '■グラフ有無判定
    If shp_ct > 0 Then
        MsgBox "アクティブシートに、グラフは存在します。"
    Else
        MsgBox "アクティブシートに、グラフは存在しません。"
    End 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」の場合に、変数「shp_ct」で件数を数えています。

最後に、「shp_ct」が0件よりも多い場合、「”アクティブシートに、グラフは存在します。」とメッセージを出すようにしています。

If shp.Type = msoChart Then 
    shp_ct = shp_ct + 1 
End If
'■グラフ有無判定
If shp_ct > 0 Then
    MsgBox "アクティブシートに、グラフは存在します。"
Else
    MsgBox "アクティブシートに、グラフは存在しません。"
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)
エクセル シートにグラフが存在するかどうか(有無)を調べる方法(Excel VBA)

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