
マクロを実行したら「オートメーション エラーです。」と表示され、処理が止まってしまった。
再起動すると直るのに、しばらくすると同じエラーが出る。
そんな状況にお困りではありませんか。
ExcelVBAによる処理において、恐らく最もやっかいなのが、この「オートメーションエラー」。
再現性に一定の規則が見られない場合が多く、開発現場では、何が何でもこの致命的なエラーを回避しなければ、次のステップへ進めませんので、発生傾向を振り返ってみました。
結論から言うと、主な原因は「大量の繰り返し処理」「ブック内の残骸や破損」「参照設定などの環境」の3つです。
本記事では、Excel/VBA専門の開発会社であるセルネッツが、現場で見てきた7つの原因を紹介します。
エラーが出たときの対処手順と、再発を防ぐ作り方もあわせて解説します。
止まってしまったマクロ、原因の特定から直します
- 再起動すると直るが、数日たつと同じエラーで止まる
- エラーの出る場所が毎回違い、原因の見当がつかない
- マクロを作った担当者がいなくて、社内の誰も直せない
そのお悩み、Excel・VBAに特化したエラー調査と改修で解決できます。Excel専門のシステム開発会社『セルネッツ』なら、エラーの再現から原因の特定、再発しにくいコードへの改修まで対応。前任者が作ったマクロの改修もご相談いただけます。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料
オートメーションエラーとは?VBAがオブジェクトを操作できなかったときのエラー
オートメーションエラーとは、VBAがブックやシートなどのオブジェクトを操作しようとして失敗したときに出るエラーです。
Microsoftの解説では、メソッドの実行やプロパティの取得・設定のときに起きるエラーとされています。
エラーを報告するのは、VBAではなく、オブジェクトを作ったアプリケーションの側です。
そのため、コードの文法を見直しても原因が見つからないことが多くあります。
参考:Microsoft Learn「オートメーション エラーです (エラー 440)」
よく表示されるエラーメッセージ
オートメーションエラーは、状況によって次のようなメッセージで表示されます。
| 表示されるメッセージ | 主な状況 |
| オートメーション エラーです (エラー 440) | オブジェクトの操作中に、アプリケーション側でエラーが起きた |
| 実行時エラー ‘-2147417848 (80010108)’ オートメーション エラーです。起動されたオブジェクトはクライアントから切断されました。 | 操作していたブックやシートとのつながりが切れた |
| オートメーション エラーです。例外が発生しました。 | 操作先のオブジェクトやライブラリの側で問題が起きた |
どのメッセージでも、原因の探し方は同じです。
次の7つの原因に当てはまるものがないか、順に確認してください。
オートメーションエラーが起きやすい7つの原因
開発の現場で、オートメーションエラーの原因になりやすいのは次の7つです。
- (A)シート操作を延々と繰り返すLOOP
- (B)セル操作を延々と繰り返すLOOP
- (C)シート関数の不備(循環参照エラー)
- (D)無限ループなどによるメモリの大量消費
- (E)ブック、またはブック内の特定シートの破損
- (F)大量に残った「スタイル」
- (G)大量に残った図形オブジェクト
(A)シート操作を延々と繰り返すLOOP
→シートの挿入など
シートの追加や削除を何百回も繰り返す処理は、エラーの温床になります。
防ぎ方は再発を防ぐ作り方のポイントで紹介します。
(B)セル操作を延々と繰り返すLOOP
→Copy&Paste
セルを1つずつコピー&ペーストする処理も、件数が増えるほど負荷が高まります。
(C)シート関数の不備(循環参照エラー)
例えば、2行目から最下行までのデータの金額を、SUMIFS関数などをシート上のセルに出力する、そんなケースで、Fr行(小さい)→To行(大きい)という絶対的な大小関係が崩れ矛盾が生じる…。
【循環参照】と表示されるので、「数式」タブの「エラー チェック」→「循環参照」で該当するセルを確認すると、原因がわかります。
(D)無限ループなどでメモリを大量消費してしまい発生
これは、特定の場所ではなく、メモリ残量がなくなった時点で発生のため、毎回、落ちる箇所が変わるので、メモリ不足が原因だと見当がつきます。
メモリ不足のエラーへの対処は、ExcelVBA「メモリが不足しています。」で解説しています。
(E)Excelブック、又は、ブック内の特定シートが壊れている場合
どうしても駄目な場合は、怪しいシートを作り直すことで解決する場合があります。
(シートを新規ブックに移行することで解決する場合があります。)
(F)Excelブック内に、大量の「スタイル」が存在するケース
コピペを繰り返すうちに、発生するようですが、明らかに不要と思われるスタイルが大量にある場合は、一旦、マクロで全て削除してしまいましょう。とは言うものの、削除して良いスタイルと、そうでないスタイルが混在する場合もあり、この辺りの判断は何とも言えませんが、その影響にて判断を行うしかありません。
不要なスタイルを一括で削除する方法は、大量のスタイル(Style)残がいを一括削除する方法で紹介しています。
(G)図形オブジェクトが大量に存在するケース
目視チェックでは識別不能な【小さな点オブジェクト】や、【透明】が大量に存在するケースは珍しくありません。
つまり、図形の残骸ですが、検索でチェックすると一目瞭然なので、ブックのサイズがやけに重いと感じたら、点検してみることをオススメいたします。
「ホーム」タブの「検索と選択」→「オブジェクトの選択と表示」を開くと、シート上の図形を一覧で確認できます。
ざっと、上記のような事が原因で生じるようですので、致命的エラー「オートメーションエラー」回避のご参考になれば幸いです。
オートメーションエラーが出たときの対処手順
エラーが出たら、手軽なものから順に次の6つを試します。
- Excelを再起動する
- エラーが出た行を特定する
- エラー番号と内容を確認する
- 参照設定に「参照不可」がないか確認する
- 怪しいシートを新しいブックに移す
- Officeの更新状況を確認する
手順1:Excelを再起動する
まずExcelをすべて閉じ、開き直してから同じ処理を実行します。
タスクマネージャーにExcelが残っている場合は、パソコンごと再起動してください。
再起動で直っても、原因が残っていれば再発します。
手順2:エラーが出た行を特定する
エラー画面で「デバッグ」を押すと、止まった行が黄色で表示されます。
毎回同じ行で止まるなら(A)(B)(C)を、毎回違う行なら(D)を疑います。
調べ方は「デバッグのコツ」実行時エラーの原因究明に必要なことが参考になります。
手順3:エラー番号と内容を確認する
オートメーションエラーを含む実行時エラーは、エラーが起きた行で処理が止まります。
そのため、エラーの行の直後に確認用のコードを書いても、そこまで処理が進みません。
番号と内容を確かめるには、On Error GoTo でエラー時の処理へ移動させ、そこでErrオブジェクトの値を表示します。
Sub 処理名()
On Error GoTo ErrHandler
'(ここに元の処理)
Exit Sub
ErrHandler:
Debug.Print Err.Number, Err.Description, Err.Source
End Sub
エラーが起きると「ErrHandler:」の行へ移動し、イミディエイト ウィンドウ(Ctrl+G)に番号・内容・発生元が表示されます。
「Exit Sub」を入れ忘れると、エラーがないときもエラー時の処理が実行されるので注意してください。
オートメーションエラーの番号は「-2147417848」のような大きなマイナスの数値になることが多く、この番号で検索すると原因の手がかりが見つかりやすくなります。
手順4:参照設定に「参照不可」がないか確認する
VBEの「ツール」→「参照設定」を開き、チェックの入った項目を確認します。
「参照不可:」と表示された項目があれば、チェックを外すか正しいライブラリを選び直します。
別のパソコンで作ったマクロを使うときに起きやすい原因です。
手順5:怪しいシートを新しいブックに移す
特定のブックでだけエラーが出る場合は、(E)のブックの破損を疑います。
シートを新しいブックに移すか、シートを作り直して動作を確かめてください。
手順6:Officeの更新状況を確認する
昨日まで動いていたマクロが急に止まった場合は、WindowsやOfficeの更新が影響していることがあります。
事例は「一部の内容に問題が見つかりました」でマクロが削除される原因と対処法で紹介しています。
64ビット版のOfficeに変わった場合は、64ビット版で出るコンパイルエラーの直し方もあわせて確認してください。
再発を防ぐ作り方のポイント
オートメーションエラーは、作り方を見直すことで起きにくくできます。
セルネッツが開発で意識しているのは、次の4点です。
- セルの値は1つずつ扱わず、配列にまとめて読み書きする
- 処理中は画面更新と自動計算を止め、Excelの負荷を下げる
- 処理の最初に、シートの状態(フィルターや選択範囲など)をリセットする
- 不要なスタイル・図形・名前の定義を、定期的に掃除する
画面更新は Application.ScreenUpdating = False、自動計算は Application.Calculation = xlCalculationManual で止められます。
処理の最後には、必ず元の設定に戻してください。
シートのリセット処理はリセット処理でバグ発生率を下げる為にやることで詳しく解説しています。
納品前に確認している項目はExcelシステム〜納品前ブック点検【重要7項目】にまとめています。
オートメーションエラーに関するよくある質問
再起動すれば直りますか?
一時的には直ることが多いです。
ただし、7つの原因が残っていれば、同じ処理でまた発生します。
再発する場合は、対処手順の2〜6を試してください。
On Error Resume Nextでエラーを無視してもよいですか?
おすすめしません。
エラーを無視すると、処理が途中で失敗したまま進み、データが壊れる恐れがあります。
使う場合は、直後でErrオブジェクトを確認する書き方に限ります。
注意点はOn Error Resume Nextとは?便利だけど十分注意したいエラー処理とOn Error GoTo 0での解除で解説しています。
エラーが出る場所が毎回違うのはなぜですか?
メモリ不足や、繰り返し処理の負荷が原因の可能性が高いです。
特定の命令ではなく、限界に達した時点でエラーになるため、止まる行が毎回変わります。
(A)(B)(D)を中心に確認してください。
まとめ|オートメーションエラーは原因の切り分けから
オートメーションエラーは、VBAがオブジェクトを操作できなかったときに出るエラーです。
大量の繰り返し処理、ブック内の残骸や破損、参照設定などが主な原因になります。
再起動で直っても、原因を取り除かなければ再発します。
社内で原因を特定できない場合は、Excel専門の開発会社に相談するのが近道です。

本サービスは、緊急性が高く、問題解決を必要とするケースでご利用メリットがあります。
原因がわからないまま、マクロを使い続けていませんか
- 業務が止まっていて、すぐに直したい
- 社内で調べたが、原因を特定できなかった
- 直せなかった場合の費用が心配で、依頼をためらっている
セルネッツのExcelエラー解決サービスは、1件30,000円(税別)で、事象の再現から原因の究明、解決策のご提示まで行います。1件あたりの対応時間は3時間以内で、解決できなかった場合は料金をいただきません。リモート接続での対応も可能です。マクロの作り直しが必要な場合は、内容に合わせてお見積もりします。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料