エラーメッセージ「実行時エラー ‘1004’:アプリケーション定義またはオブジェクト定義のエラーです。」の原因と解決方法を紹介します!
目次
エラー ‘1004’ が発生する主なケース
原因のパターン | 説明例 |
---|---|
① 存在しないセル・シートを参照している | Sheets("Data") や Range("Z1000") など |
② ブックやシートが非表示・保護状態 | シートが非表示や保護されているとエラーに |
③ RangeやCellsの指定が曖昧 | Range("A" & i) で i が未定義など |
④ マクロ実行中にファイルが閉じられた | 参照しているブックが閉じられている |
⑤ コピー/貼り付け処理の文法ミス | .Copy 後の .Paste の使い方など |
例①:存在しないシートを参照してエラー
NGコード(存在しないシートを参照しているため)
Sheets("Data").Select ' ← "Data" シートが存在しなければエラー1004
OKコード(シートの存在を確認してから処理しているため)
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") → エラー1004
OKコード(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
の指定が動的でも正確か- コピーやペーストの順序や文法が正しいか
- 変数が事前に設定されているか