【VBA】実行時エラー ‘1004’ の解決法|セルやシートが見つからない原因とは?

エラーメッセージ「実行時エラー ‘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

✅ エラー解決のチェックリスト

  • シート・セル・ファイルが存在しているか
  • 対象が保護状態・非表示状態・閉じられていないか
  • RangeCells の指定が動的でも正確か
  • コピーやペーストの順序や文法が正しいか
  • 変数が事前に設定されているか
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次