VBAでマクロを実行しているときに突然表示される「実行時エラー ‘1004’:アプリケーション定義またはオブジェクト定義のエラー」。
このエラーは非常に汎用的であるため、初心者の方だけでなく中級者以上の方でも原因の特定に悩まされることが多いものです。
本記事では、特に ChartObjects.Delete の行で発生するこのエラーに焦点を当てて、エラーの意味・よくある原因・解決方法を丁寧にご説明いたします。
エラーの意味:「アプリケーション定義またはオブジェクト定義のエラー」とは?
このエラーは、VBAが実行しようとした処理が、Excelアプリケーションまたは対象のオブジェクトの状態に合致していない場合に発生します。
つまり、「この操作は現在の状況では実行できません」とExcelが判断したときに発生します。
よくある原因(ChartObjects.Delete 編)
以下のようなコードでよく見られます。
wsDst.ChartObjects.Deleteこのコードは、ワークシート上にあるすべてのグラフ(ChartObject)を削除しようとしていますが、以下のような状態だとエラーが発生することがあります。
主な原因一覧:
| 原因 | 説明 | 
|---|---|
| グラフが1つも存在しない | ChartObjects.Count = 0のときに.Deleteを実行するとエラーになることがある | 
| ワークシートが非表示・保護されている | 対象シートが保護状態にあるとオブジェクトの削除が拒否される | 
| ChartObjectsの参照が正しくない | wsDstが無効、または誤って別の型(例:グラフ以外)を指している | 
| グラフが埋め込み型ではなく、独立した「グラフシート」である | ChartObjectsは埋め込みグラフのみを扱います | 
解決方法
方法①:グラフが存在するか確認してから削除する
If wsDst.ChartObjects.Count > 0 Then
    wsDst.ChartObjects.Delete
End Ifこのように、存在を確認してから削除処理を行うことで、エラーを未然に防ぐことができます。
方法②:シートの保護や非表示を解除する
削除対象のシートが保護されていないか、非表示になっていないかを確認します。
wsDst.Visible = xlSheetVisible
wsDst.Unprotect方法③:グラフの種類に注意する
独立した「グラフシート(Chart)」は ChartObjects では操作できません。埋め込みグラフだけが対象である点に注意が必要です。
まとめ
「実行時エラー 1004」は、非常に多くの原因で発生する可能性があるため、冷静にエラー発生行の処理対象と状態を確認することが最も重要です。
特に ChartObjects.Delete を使用する際は、対象のシートにグラフが存在しているかを事前にチェックすることで、安定した動作を実現できます。
【AI×就労支援】Neuro Dive(ニューロダイブ)で先端ITを学び、スペシャリストとしての就職を目指しませんか?
最後に宣伝をさせてください。
「AIやデータサイエンスを仕事にしたい」 「でも、独学には限界が…」
そんな方に知ってほしいのが、日本初の”先端IT特化型”就労移行支援『Neuro Dive』です。
IT職種への就職率80%超、職場定着率95%超という実績は、信頼の証。 障害のある方の「学びたい」を「仕事」に繋げるプロフェッショナルです。
ご興味があれば、ぜひ公式サイトをチェックしてみてください。


 
			 
			 
			 
			 
			 
			 
			