1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

知らないと怖いExcelVBAの穴14~On Error Resume Next の危険性と対策~

1
Last updated at Posted at 2026-01-09

1. はじめに

Excel VBAでは、エラーが発生すると通常マクロが停止します。
これを回避するために、VBAにはいくつかのエラー処理の仕組みが用意されています。
(Microsoft Learn)

中でも次のような文はよく見かけます。

VBA
On Error Resume Next

一見すると便利ですが、これには 非常に怖い落とし穴 があります。

本記事では On Error Resume Next の危険性と、
実務で使う場合の活用法について整理します。

2. On Error Resume Next とは

On Error Resume Next は、
エラーが発生してもその行をスキップし、次の行へ処理を続行 する
VBAのステートメントです。

これはエラーを無視して処理を進めるため、処理の途切れを避けたいケースで使われます。
たとえば、存在しない可能性のあるオブジェクトを指定する場合などです。

3. 一番の危険点:重大なエラーを見逃す

最大の問題は、 On Error Resume Next
すべてのエラーを見えなくしてしまう点です。

これはたとえば次のような場合です。

VBA
Sub sumple()
    Dim ws as Worksheet
    On Error Resume Next
    
    Set ws = Sheets("「存在しないシート名」")'wsはNothingになる
    ws.Range("A1") = "ABC" 

End Sub

エラーで止まることもなく終了するので、一見正常に処理されたように見えますが、
シート自体が存在しないため、何も入力されていません。

これにより、

  • 処理が実は何もされていない
  • 想定した処理が飛ばされている
  • 結果だけがおかしい

という気づきにくい不具合が発生します。

4. もう一つの罠:エラー処理が“有効範囲全体”に及ぶ

On Error Resume Next を記述した位置より下は、
そのプロシージャの 最後までエラーが無視され続けます。

つまり、
処理の途中で1つだけ無視したいエラーがあっても、
その先の行すべてでエラーがスルーされてしまいます。

※プロシージャを抜けない限り効果が続くため、無視範囲が広がってしまいます。

5. なぜこの問題が実務で特に厄介なのか

On Error Resume Next の問題点は、
「エラーを無視すること」そのものではありません。

本当に厄介なのは、

  • VBAとしては正常終了する
  • Excelもエラーを出さない
  • 処理結果だけがおかしくなる(しかも発見しにくい)
    という点です。

つまり、

壊れていることに気づけない

タイプの不具合を生みやすい、ということです。

6. Resume Next は「一時的に使う」もの

On Error Resume Next は、On Error GoTo 0で解除されます。

On Error Resume Nextの本来の使いどころは、

  • 存在するか分からないオブジェクトへのアクセス
  • 失敗する可能性が想定されている1行の処理

といった、限定された場面です。

VBA
On Error Resume Next'ここで設定
Set ws = Worksheets("Sheet1")
On Error GoTo 0'ここで解除

このように、
必要な行の直前で有効にし、すぐに解除する
という使い方が基本になります。

7. Resume Next を使わない方がいい場面

次のようなケースでは、
On Error Resume Next は避けるべきです。

  • 複数行にまたがる処理
  • 後続処理が成功前提で組まれている場合
  • エラーの内容によって処理を分けたい場合

こうした場面では、

  • 事前の条件チェック
  • 明示的な分岐処理

を行った方が、安全で読みやすいコードになります。

8. 実務での指針(まとめ)

  • Resume Next は 限定的に使う
  • 有効範囲を最小限にする
  • 解除(On Error GoTo 0)を忘れない
  • 「エラーを隠すため」に使わない

そう理解して使うことがExcel VBAでは非常に重要です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?