VBA 実行時エラー ‘1004’ の原因と対処法|よくある6パターンと見つけ方

Excel・VBA

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ツール

Microsoft Excel、Microsoft Office、Visual Basic は Microsoft Corporation の商標です。

自分で調べて直す時間がない方へ
ココナラで作業をお受けしています(筆者のサービスです)。→ 引き継いだExcelマクロを解析し、仕様書にします(ココナラ)

コメント

タイトルとURLをコピーしました