VBAエラー1004|別シートで止まるRange・Cellsの直し方

VBAエラー1004|別シートで止まるRange・Cellsの直し方

記事
IT・テクノロジー
別シートを開くとVBAマクロが1004で止まる場合は、RangeとCellsの参照先を確認しましょう。

この記事では「参照するシートが混ざっている場合」を直します。

1004にはほかの原因もあるので、番号だけで判断せず、止まった行と次のコードを見比べてください。

■ まず、元のファイルを残します


ファイルを閉じてコピーし、「売上集計_修正テスト.xlsm」などの別名にします。原本は残し、コピーで作業します。

メール送信や外部ファイルの上書きは、コピーでも本番に影響します。中身が分からなければ実行せず、コードの確認までで止めてください。

対象はWindows版デスクトップExcelです。会社のマクロ利用ルールに従い、セキュリティ設定は一括で緩めないでください。

■ RangeとCellsが別のシートを見ている例


標準モジュールに、次のコードがあるとします。

With ThisWorkbook.Worksheets("売上")
Set target = .Range(Cells(2, 1), Cells(10, 3))
End With

Withの中でも、ドットのないCellsはWithの相手を参照しません。この標準モジュールでは、次のように参照先が分かれます。

・.Range → 「売上」シート

・Cells → いま表示中のシート

別シートを表示すると、異なるシートのセルで範囲を作ろうとしてエラーになります。

この例は標準モジュール内の処理が対象です。シートのコード画面では、省略した参照先の扱いが異なります。下の手順で、自分の既存マクロの該当箇所だけを修正してください。

■ 直す場所は、Cellsの前のドットです


2つのCellsの前に、半角のドットを付けます。

With ThisWorkbook.Worksheets("売上")
Set target = .Range(.Cells(2, 1), .Cells(10, 3))
End With

RangeとCellsが、同じ「売上」シートを参照する形です。
inline-reference-diagram.png


■ ThisWorkbookの参照先に注意


ThisWorkbookは「このコードが入っているブック」を指します。

PERSONAL.XLSBやアドインにコードがある場合、作業中の売上ファイルを指すとは限りません。一律にThisWorkbookへ置き換えず、コードのあるブックを確認してください。

「売上」シートがなければ実行時エラー9になります。自分のファイルでは、コードとタブの名前を一致させてください。

■ 自分のマクロに当てはめる手順


1. エラー画面で「デバッグ」を押せる場合は、黄色くなった行とマクロ名を控えます。確認のために本番マクロを繰り返し動かさないでください。

2. テスト用コピーでAlt+F11、Ctrl+Rを押し、コピーの「標準モジュール」から該当マクロを開きます。停止中なら該当行を控え、上部の四角い「リセット」で終了します。書換え済みのセルはリセットでは戻りません。

3. 修正前コードをメモ帳などへ保存します。該当行が .Range(Cells(...), Cells(...)) で、Withが意図したワークシートを指す場合だけ、2つのCellsの前にドットを足します。行・列番号、変数名、シート名は自分の処理のまま残します。

4. Ctrl+Sで保存し、Alt+QでExcelへ戻ります。書き込み先・送信先を本番と分けられた場合だけ、いつものボタンなどでコピーのマクロを実行します。

行の形が違う、Withの相手が不明、コードが見えない場合は、ここで止めます。ドットを一括追加せず、エラー画面と該当行を控えてください。

■ エラーが消えたら、結果も確認しておきましょう


元コードのRange、Cells、Rows.Countなどが、意図したブック・シートを参照しているか確認します。

安全に実行できる状態で、次の3つを確認しましょう。

・別のシートを開いて実行しても、結果が変わらないか

・転記件数と合計が、手作業で確認した結果と一致するか

・意図していないシートやファイルが書き換わっていないか

行を追加するマクロは、毎回同じ入力・転記前の状態から比べます。行が増えたまま続けて実行しないでください。

結果が違えば本番に使わず、修正前コードへ戻すか、テスト用ファイルを作り直します。コードを戻しても転記・保存・送信は取り消されないため、影響先も確認してください。

まだ1004で止まる場合は、シート保護、Select、保存先なども確認します。On Error Resume Nextで先へ進めると処理漏れを見逃すため、エラーを残して原因を調べましょう。

■ 動作確認の範囲


2026年10月8日、Windows版Excel 16.0の範囲参照をCOM(外部からExcelを操作する仕組み)で確認しました。「売上」「確認用」「別ブック」の表示中も、正しい参照は売上!A2:C10でした。異なるシートを混ぜた参照では1004を再現しています。

掲載コードをVBAとして実行する確認は未実施です。お使いの環境では、本番と分けたコピーで結果を確かめてから適用してください。

修正を任せたい場合は、「エラー画面」「止まった行」「正常時の出力」をお知らせください。共有するファイル・コードからは個人情報と機密情報を除いてください。

Excel・VBAのご相談:


参考:Microsoft公式ドキュメント

Worksheet.Range

Worksheet.Cells

Application.ThisWorkbook

Range.Address
サービス数100万件のスキルマーケット、あなたにぴったりのサービスを探す