別シートを開くと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が、同じ「売上」シートを参照する形です。
■ 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