エラーメッセージ「実行時エラー ‘1004’:アプリケーション定義またはオブジェクト定義のエラーです。」の原因と解決方法を紹介します!
目次
エラー ‘1004’ が発生する主なケース
| 原因のパターン | 説明例 |
|---|---|
| ① 存在しないセル・シートを参照している | Sheets("Data") や Range("Z1000") など |
| ② ブックやシートが非表示・保護状態 | シートが非表示や保護されているとエラーに |
| ③ RangeやCellsの指定が曖昧 | Range("A" & i) で i が未定義など |
| ④ マクロ実行中にファイルが閉じられた | 参照しているブックが閉じられている |
| ⑤ コピー/貼り付け処理の文法ミス | .Copy 後の .Paste の使い方など |
例①:存在しないシートを参照してエラー
NGコード(存在しないシートを参照しているため)
Sheets("Data").Select ' ← "Data" シートが存在しなければエラー1004OKコード(シートの存在を確認してから処理しているため)
If SheetExists("Data") Then
Sheets("Data").Select
Else
MsgBox "シート『Data』が見つかりません"
End If例②:Rangeの指定が不正(変数が未初期化)
NGコード(iが未設定で Range(“A0”) になっているため)
Dim i As Long
Range("A" & i).Value = "テスト" ' i = 0 → Range("A0") → エラー1004OKコード(iを明示的に初期化してから使用しているため)
Dim i As Long
i = 1
Range("A" & i).Value = "テスト" ' Range("A1") → 正常に動作例③:保護されたシートに書き込んでエラー
NGコード(シートが保護されているのに値を書き込もうとしているため)
Sheets("Report").Range("A1").Value = "出力完了"OKコード(保護を一時的に解除してから処理しているため)
With Sheets("Report")
.Unprotect Password:="mypassword"
.Range("A1").Value = "出力完了"
.Protect Password:="mypassword"
End With✅ エラー解決のチェックリスト
- シート・セル・ファイルが存在しているか
- 対象が保護状態・非表示状態・閉じられていないか
RangeやCellsの指定が動的でも正確か- コピーやペーストの順序や文法が正しいか
- 変数が事前に設定されているか

