On Error Resume Next: Excel VBAのエラー処理について

  • これを共有
Hugh West

Microsoft Excel VBAでは、エラー処理は重要なタスクの1つです。 コーダーであれば、完璧なアプリケーションを構築するためのエラー処理の重要性をご存知でしょう。 ステートメントに誤りがあると、VBAコードは多くの点で邪魔になります。 ですから、VBAコードを実行中にそれらのエラーを処理することに注意しなければなりません。 ExcelでVBAコードを使用していると、多くの実行時エラーがあります。 解決するには、次のようにします。のいずれかを使用します。 On Error Resume Next の文言があります。

このチュートリアルでは On Error Resume Next このチュートリアルは、適切な例と適切な図解でポイントを押さえています。 では、お付き合いください。

練習用ワークブックをダウンロードする

VBA On Error Resume Next.xlsm

Excel VBAのエラー処理

Microsoft Excel VBAで作業していると、サブプロシージャで多くのエラーに直面します。 VBAはステートメントを実行できないとき、ランタイムエラーを投げます。

Excelはこれらのエラーに自動的に対処するため、ランタイムエラーが出現すると、次のようなデフォルトのエラーメッセージを表示します。

さて、これらにはいくつかのVBAステートメントで様々な対処が可能です。 それらについては、後のセクションで説明します。

続きを読む Excelの#REF! エラーを修正する方法 (6つの解決策)

VBAのエラーステートメントについて

実行時エラーの処理は、On ErrorステートメントでExcelに指示し、次にどのような処理を行うかを即座に決定する。 基本的には、このようなエラー処理によって、エラーを無効化する。

Excel VBAでは、3種類のOn Errorステートメント(構文)を使用します。

  • On Error GoTo
  • On Error Resume Next
  • On Error GoTo 0

エラーを見つけたら、On Errorコマンドを使います。 オンエラー を宣言すると、それらのランタイムエラーは悲惨なことになり、エラープロンプトが表示され、実行が停止されます。

を使用する場合 オンエラー 文で、「有効な」エラーハンドラをオンにする。 有効な」エラーハンドラは、エラー処理動作を開始するハンドラである。 エラーハンドラが関与している間にミスが発生した場合、現在のメソッドのエラーハンドラはエラーを耐えることができない。 その後、制御は呼び出しプロシージャに戻される。

呼び出し側のプロセスが有効なエラーハンドラを持っている場合、そのエラーハンドラがエラーを処理するために起動されます。 呼び出し側のシステムのエラーハンドラがそれに対応して作動している場合、有効だが非活性のエラーハンドラを見つけるまで、以前の呼び出し手続きを介して制御を戻します。 アイドル状態のエラーハンドラが見つからない場合、そのエラーはその発生時点で壊滅的であることを意味します。

エラーハンドラが呼び出し元のプロシージャに権限を返すたびに、そのプロシージャは既存のプロシージャを発展させる。 実行は、現在のプロシージャで レジュメ 文は、エラーハンドラが任意のプロシージャのエラーを処理するときに使用します。

VBAで「エラーが発生したら次を再開する」。

では、その On Error Resume Next ステートメントは、エラーのあるコード行を無視して、すぐに次のコード行に進むようにVBAに指示します。 その後、Excel VBAコードは、その中にエラーが含まれている行をスキップして、次のコードシーケンスに移動します。

があります。 On Error Resume Next この文は、ランタイムエラーが発生しても、実行をスキップすることができます。 特定のコード行がエラーを発生させる可能性がある場合は、エラー処理ルーチンを手続き内の別の場所に置くのではなく、そこに置くようにしてください。 On Error Resume Next 文は、コードが他のプロシージャを呼び出すとアイドル状態になります。 そのため、そのルーチンでマッチしたエラー処理が必要な場合は、そのルーチン内で On Error Resume Next コマンドを各パターン名で実行します。

マクロの動作に必要のない行をスキップするのは合理的ですが、使い方を間違えると、意図しない結果をもたらす可能性があることを忘れないでください。

覚えておいてください。

On Error Resume Nextステートメントは、ランタイムエラーを修正するものではなく、ランタイムエラーが発生したステートメントからVB実行が再開されるようなエラーを基本的に無視するものです。

次のコードを見てください。

 Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

5を0と1で割ってみました。 コードを実行してみましょう。 以下のような出力が表示されます。

ランタイムエラーが発生します。 数値を0で割ることはできません。 コードをデバッグすると、次のように表示されます。

VBプログラムでは、エラーを発見すると直ちにプロシージャを停止し、次の行は実行されません。

では、その実装を On Error Resume Next 文の前に、エラー文があります。

 Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

コードを実行すると、次のように表示されます。

このように、VBAはエラーが発生した行を無視して、すぐに次の行のコードに進みます。 このように、VBAで使用できるのは On Error Resume Next ステートメントを使用して、Excel VBAでエラーを処理することができます。

VBAでの「On Error Resume Next」の使用例

以下の項では、2つの事例を紹介します。 On Error Resume Next VBAを使用してExcelのワークシートに実装することができるステートメントです。 これらすべてを学び、あなたのワークブックに適用することをお勧めします。 それは間違いなくあなたのExcelの知識を増加させます。

1.ワークシートを隠すための「On Error Resume Next」ステートメント

さて、今回の例では、アクティブなワークブックのすべてのワークシートを隠すVBAコードを紹介します。

次のスクリーンショットをご覧ください。

ここでは、4つのワークシートがありますが、以下のVBAコードですべて非表示にします。

 Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

以下のコードを実行すると、以下のランタイムエラーが表示されます。

Excelは、ワークブック内のすべてのシートを隠すことができないので、このエラーを無視しなければなりません。 そのためには、On Error Resume Nextステートメントをコードに実装する必要があります。

 Sub hide_all_sheets() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

VBAコードの実行が完了すると、次のような出力が表示されます。

結局、実行後にエラーが表示されることはありません。 つまり、On Error Resume Nextステートメントは、VBAのコードで本当にうまく機能したのです。

続きを読む Excelのエラーとその意味(15種類のエラー)

2.VBAでVLOOKUP関数に「On Error Resume Next」を設定する。

の例を示します。 VBAのVLOOKUP関数 さて、このVBAコードにも On Error Resume Next の文言があります。

次のスクリーンショットをご覧ください。

ここでは、何人かの人の名前と年齢が表示されています。 隣のテーブルで ブイルック をクリックすると、その人の名前と年齢を調べることができます。

これを行うには、次のコードを入力します。

 Sub VLOOKUP_Function() Dim i As Long For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

ここで、マクロを実行すると、以下のエラーが表示されます。

さて、これはランタイムエラーです。 なぜ起こるのでしょうか? もう一度、データセットを見てみましょう。

見ての通り、"Aaron "と "Emma "のデータはありません。 そのため、"Aaron "と "Emma "だけが実行されるのです。 ブイルック を実行し、その後、実行を停止します。 もし、このエラーを無視して、残りの年代を探したい場合は、次のようにします。 On Error Resume Next の文言があります。

 Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

VBAのコードを実行すると、次のような出力が表示されます。

ご覧の通り、適用することで On Error Resume Next コマンドを実行すると、エラーを無視して残りの人物の年齢が表示されます。 VBAコードはAaronとEmmaのデータを見つけられませんでした。 そのため、これらの値を無視してExcelワークシートに残りの値を返しました。

Read More: [修正] このワークシートの1つ以上の数式参照に問題があることをExcelが発見した。

Excel VBAで「エラー時に次の操作を再開する」をオフにする

さて、VBAコードの特定のセグメントのエラーを無視したい場合があります。 VBAコードでOn Error Resume Nextステートメントを使用すると、それ以降のすべてのエラーをスキップすることを覚えておいてください。 これをオフにして、別のセグメントのエラー処理を有効にするには On Error GoTo 0 再びエラー処理が可能になります。

一般的な使用方法。

Sub error_handling()

エラーを無視するには

On Error Resume Next

// コード行数

エラー処理をオンにするには

On Error GoTo 0

//コードの行数

エンドサブ

次のVBAコードを見てください。

 Sub error_handling() Dim i As Long 'エラーを無視する On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i 'エラーでオフにする Next Resume On Error GoTo 0 MsgBox i / 0 End Sub 

のコードを以前使用しました。 ブイルック このコードでは、エラーは無視されます。 ブイルック の後に、エラー処理を有効にします。 On Error GoTo 0 の文言があります。

続きを読む Excel VBA: "On Error Resume Next" をオフにする。

VBAの「On Error GoTo」。

前回はOn Errorメソッドによるエラー処理について説明しました。 今回の記事はすべて On Error Resume Next. さて、エラー処理にも2種類あり、次のセクションで説明します。

1.VBA On Error GoTo 0

があります。 On Error Goto 0 ステートメントは、コードにエラーハンドラがない場合にExcelに組み込まれた設定です。 これは基本的に、VBAがエラーハンドラでエラーを見つけたときに On Error GoTo 0 というメッセージが表示されると、コードの実行が停止され、従来のエラーメッセージボックスが表示されます。

On Error GoTo 0 ステートメントは基本的に現在のプロシージャのエラー処理をオフにします。 たとえメソッドが行番号0を含んでいたとしても、行番号0をエラー処理コードの開始として定義するわけではありません。

次のコードを見てください。

 Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub 

このコードは、基本的に、現在のワークブックのすべてのワークシートを隠します。 さて、私は、確かに、追加のコードに On Error GoTo 0 を実行してエラーを表示します。 このコードを実行すると、次のようになります。

アクティブなワークブックに同じ名前のシートを持つことができないため、このエラーが表示されます。

2.VBAのオンエラーGoToライン

ここで、もしエラーが見つかったら、別のコードを実行するようにExcelに指示することもできます。 On Error GoTo line これは、エラーを発見した後、Excelに何かを実行するように指示します。

line 引数は、任意の行タグまたは行番号です。 私たちのコードが何らかのランタイムエラーを起こした場合、その行に移動し、実行時にエラーハンドラがアクティブになります。 定義した行は、On Error ステートメントと同じプロシージャ内になければならないことを覚えておいてください。さもなければ、コンパイルエラーを引き起こします。

次のコードを見てください。

 Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler: MsgBox "There is also sheet with same name. Try different one.Of the same name" End Sub 

前の例でコードを見たとき、私たちは On Error GoTo 0 というエラーが出てしまいますが、ここではそれを On Error GoTo line の文言があります。

さて、このコードを実行すると、次のようになります。

見ての通り、標準のエラーダイアログボックスは表示されず、代わりに エラーハンドラ Excel が何らかのエラーを検出すると、そのエラーは エラーハンドラ セグメントを表示し、メッセージボックスを表示します。

も使用しました。 イグジットサブ という名前のシートがない場合は、"Select" をクリックします。 ブイルック 「エラーハンドラやメッセージボックスの表示は不要なので、ここで実行を終了します。

ExcelでVBAの「エラー時」が機能しない

どんなに頑張っても On Error メソッドが動作しないことがあります。 前回までは オンエラー を使用してもエラーが表示されることがあります。 On Error Resume Next または On Error GoTo 0 このような場合、あなたのコードにいくつかの原因がある可能性がありますが、私はそれを示すつもりはありません。

VBAの基本的な理由は、' オンエラーの Not Working in Excelは、Excelの「Break on All Errors」オプションをオンにしています。

それを解決するために、以下のステップを踏んでください。

📌 ステップス

  • まず、以下を押します。 Alt+F11 をキーボードで入力すると、VBAエディターが起動します。
  • ここで、「」をクリックします。 ツール>オプション。

  • その後 一般 のタブをクリックします。 オプション のダイアログボックスが表示されます。

  • ここで、" すべてのエラーでブレーク 「はすでにチェックされています。 基本的には、エラー処理ができなくなります。
  • 変更するには、オプションの" 未処理エラー時のブレーク " をクリックします。 よっしゃー .

VBAの「エラー時」がExcelで動作しない問題が解決することを祈っています。

続きを読む ExcelのNAMEエラーの理由と対処法(10例)

💬覚えておくべきこと

✎ エラーの場合、次を再開する はエラーを修正せず、基本的にエラーを無視して次のステートメントに進みます。

Excel は、ランタイムエラーを Err オブジェクトにトラップして保存します。 On Error Resume Next ステートメントを使用すると、Errオブジェクトのプロパティがクリアされます。

をオフにすることができます。 On Error Resume Next ステートメントをExcelのVBAコードに追加してください。 On Error GoTo 0 の文言があります。

結論

最後に、このチュートリアルは、あなたが使用するために有用な知識の一部を提供したことを願っています。 On Error Resume Next Excel VBAでこれらの手順を学び、あなたのデータセットに適用することをお勧めします。 練習用ワークブックをダウンロードし、自分でこれらを試してみてください。 また、コメント欄で自由にフィードバックしてください。 あなたの貴重なフィードバックが、このようなチュートリアルを作成するモチベーションを維持するのです。

ホームページのチェックをお忘れなく Exceldemy.com Excelにまつわる様々なトラブルや解決策をご紹介します。

新しい手法を学び続け、成長し続ける

Hugh West は、業界で 10 年以上の経験を持つ、非常に経験豊富な Excel トレーナー兼アナリストです。彼は会計と財務の学士号と経営管理の修士号を取得しています。ヒューは教えることに情熱を持っており、理解しやすい独自の教育アプローチを開発しました。彼の Excel に関する専門知識は、世界中の何千人もの学生や専門家がスキルを向上させ、キャリアで優れた成果を上げるのに役立ってきました。 Hugh はブログを通じて知識を世界に共有し、個人や企業が潜在能力を最大限に発揮できるよう無料の Excel チュートリアルとオンライン トレーニングを提供しています。