VBAの実行時エラー1004は何が原因?9・13・91も、8つの原因を起こして番号から逆引きした
引き継いだVBAマクロの実行時エラー1004は、架空の受注集計マクロ(約800行)で起こした8つの原因のうち、空の範囲と保護シートの2つでしか出ませんでした。シート名の変更とシートの削除は、どちらも9です。残りは13・91・76と、番号が出ない1つでした。各原因を3回ずつ、計24回起こして、番号も文面も毎回同じでした。番号から原因を引く表を載せます(2026年10月時点)。
読み解きから直す・置き換えるまでの流れと費用はExcelマクロの引き継ぎのページにまとめています。
要点
- 1004になったのは、8つの原因のうち空の範囲と保護シートの2つでした。
- シート名の変更とシートの削除は、どちらもエラー9でした。1004ではありません。
- 各原因を3回ずつ、計24回起こして、番号と文面は毎回同じでした。
- 直す前に、原本の複製と、止まった行・番号・文面の記録を残します。
目次
実行時エラー1004・9・13・91は、それぞれ何が原因ですか?
番号は原因を1つに決めません。8つの原因を起こすと、9が2つ、1004が2つ、13・91・76と番号なしが1つずつでした。原因・番号・確認場所は次の表のとおりです。
実験に使ったのは、受注の明細を得意先と品目ごとに集計し、出荷指示やPDFを作る架空のマクロです。12モジュール788行に、品目の検索と色付けの短い手続きを2つ足し、約800行にしました。引き継ぎでよくある8つの原因を1つずつ起こし、止まった行は、その手続きに行番号を振った写しで読んでいます。
| 起こした原因 | 番号 | 画面の文面 | 止まった行 | 確認場所 |
|---|---|---|---|---|
| シート名の変更 | 9 | インデックスが有効範囲にありません。 | Set src = Sheets("受注入力") |
シート名の一覧 |
| シートの削除 | 9 | 同上 | Set ws = Worksheets("品目集計") |
シートの有無 |
| 空の範囲 | 1004 | 該当するセルが見つかりません。 | Range("E2:E2000").SpecialCells(…) |
範囲の中身 |
| 型の違う値 | 13 | 型が一致しません。 | amt = src.Cells(r, 6).Value * src.Cells(r, 7).Value |
止まった行のセルの値 |
| オブジェクト未設定 | 91 | オブジェクト変数または With ブロック変数が設定されていません。 | …Value = hit.Row |
Find で探した値の有無 |
| 外部ファイル欠落 | 76 | パスが見つかりません。 | Open fn For Output As #fno |
保存先・取込先のフォルダ |
| 保護シート | 1004 | 変更しようとしているセルやグラフは保護されているシート上にあります。… | .Range("A2:F1000").ClearContents |
シートの保護 |
| 64bitのDeclare | なし | マクロ ‘…’ を実行できません。… | 実行時には止まらない | Declare文のPtrSafe |
8つの原因すべてを3回ずつ起こして、番号と文面は24回とも同じでした。何も変えないときは、試した5つの手続きがどれもエラーなしで終わっています。
1004は、シートや範囲が見つからないときのエラーですか?
いいえ。シートが見つからない原因は9でした。実験でシート名を変えても、シートを消しても、画面に出たのは「インデックスが有効範囲にありません。」の9です。
Microsoftの説明では、9は配列の要素やコレクションのメンバーが存在しないときのエラーです。名前でシートを探すSheetsも、このコレクションの検索にあたります。
1004になったのは、2つです。空の範囲は「該当するセルが見つかりません」、保護シートは「保護されているシート上のセルを変更しようとした」でした。8つのうち2つですから、4分の1にあたります。
8つの外でも試すと、1004はさらに2通りで出ました。PDFの保存先のフォルダがないときは「ドキュメントを保存できませんでした。…」です。
ブックのウィンドウを非表示にして画面を初期化したときは、「‘Sheets’ メソッドは失敗しました: ‘_Global’ オブジェクト」でした。10通りのうち4通りが1004で、文面は4種類に分かれました。
Microsoftの「Trappable errors」の一覧に、9・13・76・91はありますが、1004はありません。1004はExcelが返す番号で、原因は文面で分けます。
画面の番号から、疑う場所を引くにはどうしますか?
番号が9なら、シートやブックを名前で探している行を疑います。止まった行の名前と、実際のシート名を見比べるのが最初の一手です。列を足したときのように、エラーを出さずに集計がずれる壊れ方は、列を追加するとマクロはずれる?の実験にまとめています。
13は、止まった行の変数に入るセルの値が、文字だったり、エラー値だったりしないかを見ます。実験では単価のセルに「オープン価格」と入れると、掛け算の行で止まりました。
91は、Findなどで探した結果を、見つからない場合を考えずに使っている行です。探している値が、相手の表に本当にあるかを確かめます。76は、設定シートに書いた保存先や取込先のフォルダが、いまもあるかです。
番号が出ず「マクロ ‘…’ を実行できません。」とだけ出るときは、PtrSafeのないDeclare文を疑います。Microsoftの説明では、PtrSafeのないDeclare文は64bit版のVBAでコンパイル時エラーです。実験では、COMから実行したため、画面のコンパイルエラーの表示までは確かめていません。VBEの[デバッグ]→[コンパイル]で、原因の行が分かります。
作った人がいないとき、直す前に何をしますか?
直す前に、原本の複製と、止まった行の記録を残します。この2つがないと、直したあとで何を変えたかも、元に戻せるかも分からなくなります。
- 原本のブックを、日付を付けて複製します。拡張子は.xlsmのままにします。.xlsxで保存し直すと、マクロが消えます。
- 複製のほうでマクロを動かし、エラーの画面を出します。
- 番号、文面、止まった手続きの名前、黄色になった行の文を書き留めます。
- エラーの直前に押したボタンと、開いていたシートも書き留めます。
記録が3行たまれば、次に同じ番号が出たとき、表と見比べられます。止まった手続きに、入口のボタンからどう来るかは、呼び出し関係とシートの読み書きの図で追えます。この記録は、Excelマクロの引き継ぎの引き継ぎ書の元にもなります。項目の例はVBAの引き継ぎ書のひな形にあります。
この実験の結果は、ほかのマクロにも当てはまりますか?
当てはまるのは、同じ書き方をしている行です。番号は原因だけでなく、止まった行の書き方でも変わります。
試したのは、1本のマクロの8つの原因です。マクロは架空で、データも架空です。別のマクロなら、同じ原因でも番号が変わりえます。
たとえば、探したコードが見つからないとき、ここでは91でした。見つからない場合を先に調べる書き方なら、エラーにならず空の答えが返ります。
実験は、Excel 16.0(ビルド20430、64bit、日本語版)をCOMから動かしました。ボタンから動かすと、入口のエラー処理が先に受けて、番号を出さずに文面だけの画面になることがあります。止まった行は、同じ手続きに行番号とエラー処理を足した写しをもう一度動かし、Erl(エラーの行番号)で読みました。
再現の手順は、error_numbers.py(図はfig_error_numbers.py)にまとめています。足した2つの手続き(14行)は、同じフォルダのmodExtra.basです。
同じマクロが社内に何本あるかは棚卸しの手順で数えます。直すか置き換えるかの比べ方はExcelマクロの移行先の比較に、金額は導入例(イメージ)にあります。
このサイトで相談するには?
番号の意味は分かっても、どの行から手を付けるか迷うマクロは、一緒に止まった行を見て、直すか置き換えるかを考えます。何をどう頼むか決まっていなくても大丈夫です。御社のやり方に合わせて、進め方を一緒に考えます。
準備は要りません。無料で相談するからお送りください。返信は最短当日です。
よくある質問
- 1004と出たら、シートが見つからないのが原因ですか?
- いいえ。実験では、シートが見つからない2つの原因はどちらも9で、1004は空の範囲と保護シートの2つでした。1004は文面を読んで分けます。
- 番号が出ず「マクロを実行できません」とだけ出たら、何を疑いますか?
- PtrSafeのないDeclare文です。実験では同じ文面になりました。Microsoftの説明でも、PtrSafeのないDeclare文は64bit版でコンパイル時エラーになります。
- 止まった行を記録するには、どうすればよいですか?
- エラーの画面で[デバッグ]を押すと、止まった行が黄色になります。直さずに、番号・文面・手続きの名前・その行の文を書き留めます。
- ボタンから動かしたときも、同じ番号が画面に出ますか?
- 出るとは限りません。実験のマクロは、ボタンの入口にエラー処理があり、番号なしの文面だけを出す作りです。実験は入口を通さず、中の手続きを直接動かしました。
この記事の実験・計算の条件
架空の受注集計マクロ(約800行)で8つの原因を各3回、計24回。手元のデスクトップ版 Excel 16.0(ビルド20430、64bit、日本語版)をCOMから実行。2026年10月17日。
出典
- Microsoft Learn「Trappable errors」(ms.date 2019-08-18、更新 2024-02-01)(2026年10月17日確認)
- Microsoft Learn「Subscript out of range (Error 9)」(ms.date 2019-08-14、更新 2024-02-01)(2026年10月17日確認)
- Microsoft Learn「Compatibility between the 32-bit and 64-bit versions of Office」(ms.date 2021-10-27、更新 2024-12-18)(2026年10月17日確認)