エクセル シートに画像が存在するかどうか(有無)を調べる方法(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 = msoPicture Or shp.Type = msoLinkedPicture 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オブジェクトのタイプが、画像「msoPicture」またはリンク画像「msoLinkedPicture」の場合に、変数「shp_ct」で件数を数えています。

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

If shp.Type = msoPicture Or shp.Type = msoLinkedPicture 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)

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