【本日のミッション】
エクセルのアクティブシートに、画像が存在するかどうか(有無)を調べよ
ミッションの概要
エクセルのアクティブシートに、画像が存在するかどうか(有無)を調べるのが、今回のミッションです。
アクティブシートに色々な種類のオブジェクトが存在する中、「画像」が存在するかどうかを判定します。
プロシージャ
画像の有無を判定するシートをアクティブにした状態で、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のみ記載しておきます。
定数 | 値 | 説明 |
msoAutoShape | 1 | 図形・オートシェイプ |
msoCallout | 2 | 吹き出し |
msoChart | 3 | グラフ |
msoComment | 4 | コメント |
msoFreeform | 5 | フリーフォーム |
msoGroup | 6 | グループ化された図形 |
msoFormControl | 8 | フォームコントロール |
msoLine | 9 | 線 |
msoLinkedPicture | 11 | リンク画像 |
msoPicture | 13 | 画像 |
msoTextBox | 17 | テキストボックス |
msoCanvas | 20 | 描画キャンバス |
msoSmartArt | 24 | スマートアート |
今回は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)
エクセルシート上 全てのオブジェクト(画像・図形・グラフ等)を選択し、削除する(Excel VBA)
エクセルシート上のオブジェクト(図形・画像・グラフ等)の件数を数える方法(Excel VBA)
エクセル シートにグラフが存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル シートに図形が存在するかどうか(有無)を調べる方法(Excel VBA)
エクセル 選択しているセル範囲に写真が存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲にグラフが存在しているか(有無)を確認(Excel VBA)
エクセル 選択しているセル範囲に図形が存在しているか(有無)を確認(Excel VBA)
エクセル 選択セル範囲の写真を削除する(Excel VBA)
エクセル 選択セル範囲のグラフを削除する(Excel VBA)
エクセル 選択セル範囲の図形を削除する(Excel VBA)
Excel VBAでワードを起動して文字を入力操作(Excel VBA)
Excel VBAでワードを起動してエクセルの表をワードに貼付け(Excel VBA)
Excel VBAでワードを起動して エクセルのエクセルの表を図としてワードに貼付け(Excel VBA)
Word コピー貼付けした図が白い枠だけ?図が表示されない現象を解決
Excel VBAでワードを起動して グラフをワードに図として貼付け(Excel VBA)