Excelのマクロを実行したら「実行時エラー ‘1004’:アプリケーション定義またはオブジェクト定義のエラーです。」と表示されて止まった——。1004 はVBAで最もよく見るエラーの1つですが、メッセージだけでは原因が分かりにくいのが難点です。
この記事では、1004 が出るよくある6パターンと、それぞれの直し方を解説します。
※この記事の後半で紹介するツールは、当ブログ(自動化ラボ)の筆者が開発・販売しているものです。
まずはエラーの行を特定する
エラーの画面で「デバッグ」を押すと、VBAエディタが開き、止まった行が黄色で表示されます。その行で何をしているか(どのシート・どのセルを触っているか)を見るのが第一歩です。変数の中身は、変数にマウスを乗せるか、「表示」→「ローカル ウィンドウ」で確認できます。
パターン1:別のシートのセルを Cells で指定している
一番多い原因です。Range の中で使う Cells にシート名を付けていないと、今開いている(アクティブな)シートのセルと解釈され、シートが食い違ってエラーになります。
' 「集計」以外のシートを開いた状態で実行するとエラー
Worksheets("集計").Range(Cells(1, 1), Cells(10, 3)).ClearContents
With を使い、Cells の前にも「.」を付けてシートを揃えます。
With Worksheets("集計")
.Range(.Cells(1, 1), .Cells(10, 3)).ClearContents
End With
パターン2:表示していないシートで Select している
「Range クラスの Select メソッドが失敗しました」と出る場合はこれです。Select は、そのシートが表示されていないと使えません。
Worksheets("集計").Range("A1").Select ' 別のシートを表示中だとエラー
先にシートを表示する(Worksheets("集計").Activate)か、そもそも Select を使わずに直接操作するのがおすすめです。
Worksheets("集計").Range("A1").Value = "済"
パターン3:シートが保護されている
保護されたシートのロックされたセルに書き込もうとするとエラーになります。処理の前後で保護を外して掛け直すか、UserInterfaceOnly:=True で「マクロからの変更だけ許可」にします。
With Worksheets("入力")
.Unprotect Password:="pass"
.Range("B2").Value = 100
.Protect Password:="pass"
End With
パターン4:開こうとしたファイルが見つからない
Workbooks.Open で指定したファイルが無いと 1004 になります。フォルダ名の変更やファイルの移動が原因のことが多いです。開く前に Dir で存在を確認すると、分かりやすいメッセージを出せます。
Dim path As String
path = ThisWorkbook.Path & "\取引先一覧.xlsx"
If Dir(path) = "" Then
MsgBox "ファイルが見つかりません:" & path
Exit Sub
End If
Workbooks.Open path
パターン5:シート名が重複・使えない文字
.Name = "..." でシート名を変えるとき、同じ名前のシートがある、31文字を超える、: \ / ? * [ ] を含む場合はエラーになります。日付を「2026/10/09」のまま付けようとして「/」で止まるのはよくある例です。
ws.Name = Format(Date, "yyyy-mm-dd") ' 「/」ではなく「-」で
パターン6:行番号・列番号が範囲外
Cells(0, 1) のように0行目を指定したり、計算した行番号がシートの最終行を超えたりするとエラーになります。最終行を求める処理の結果が想定外(データが空で 1 になる等)になっていないか、デバッグで変数の値を確認しましょう。
他人が作った長いマクロで原因を探すときは
前任者が作った数千行のマクロだと、「どの処理がどのシートを触っているのか」を把握するだけで一苦労です。1004 の多くはシートやセルの指定ミスなので、マクロ全体がどのシート・セルを使っているかの一覧があると、原因の当たりを付けやすくなります。
「マクロ解読くん」は、マクロ入りのExcelを選ぶだけで、プロシージャごとの使っているシート・セル、呼び出し関係、Select/Activate の使用やエラーの無視(On Error Resume Next)などの注意点を仕様書(Excel/Word)にまとめます。ブックを開かずに読み取るので、マクロが勝手に動く心配もありません。

まとめ
- まずは「デバッグ」で止まった行を確認する
- 一番多いのは
Cellsのシート指定漏れ。Withと「.」で揃える - Select はなるべく使わず、直接操作する
- 保護・ファイルの有無・シート名・行番号も確認する
あわせて読みたい
ほどき工房のExcelツール
- マクロ書き出しくん(無料):マクロのコードをまとめてファイルに書き出し
- 数式チェックくん:#REF!・外部リンク・直接入力の数値などを一覧に
- VBA整形くん:VBAのインデントを一括で整える
- マクロ解読くん:マクロの仕様書(Excel/Word)を自動作成
- 64bit対応チェックくん:64bit版で動かない書き方を検出
- マクロ比較くん:改修前後のマクロを新旧対照表に
- マクロ棚卸しくん:フォルダ内のマクロを一括調査
Microsoft Excel、Microsoft Office、Visual Basic は Microsoft Corporation の商標です。
自分で調べて直す時間がない方へ
ココナラで作業をお受けしています(筆者のサービスです)。→ 引き継いだExcelマクロを解析し、仕様書にします(ココナラ)


コメント