VBA forExcelのエラーの種類-リストと例

ユーザーは、VBAでさまざまな種類のエラーに遭遇することがよくあります。以下に、それらに対処して解決するためのいくつかの戦略を示します。テスト中にコードを調べるために使用できる手法と、実行時にエラーをキャッチする方法について説明します。

VBA forExcelのエラーの種類

VBAコードのさまざまな種類のエラーのテストと追跡は、時間がかかり、イライラする可能性があります。プログラマーの話を聞くのは珍しいことではありません。プログラミングプログラミングは、コンピューターが実行する命令を書くプロセスです。それは人間のためのレシピに似ています。レシピには、時間の30%以上がテストに費やされているというアクションのリストが含まれています。

時間が経つにつれて、エラーを回避するのが上手くなりますが、初めて完璧なコードを書くことはまずありません。VBAエラーを回避、処理、追跡する方法を学ぶことで、将来的には時間を大幅に節約できます。

VBAエラーの種類

簡単にするために、コーディングエラーの種類を3つのグループに分類しました。グループごとに、いくつかの例を調べてから、それらを調査して解決する方法について説明します。

1.構文エラー–特定のコード行が正しく記述されていません

2.コンパイルエラー–コードの個々の行は理にかなっているように見えますが、コードの行をまとめるときに発生する問題

3.ランタイムエラー–原則としてコードは通常正しいが、ユーザーまたは使用されているデータによって実行されたアクションが予期しないエラーにつながる場合。

構文エラーとは何ですか?

構文エラーは、最も基本的なレベルで、コードが意味をなすかどうかをVBAが判断する方法です。英語で文章を書く規則と簡単に比較することができます。

  • 被写体が必要です。
  • 動詞が必要です。
  • 資本文字が最初に必要とされます。
  • 最後に句読点が必要です。
  • 目的語、形容詞、およびその他の文法機能はオプションです。

ジェーンVBAコードで18個のエラーを見つけました

同様に、VBAは、特定の状況で必要なものに対して特定のルールを課します。たとえば、コードで基本的な条件付きIFステートメントを開始する場合、IFステートメントの最初の行に次の構文規則を複製する必要があります。

  • Ifで始まる必要があります
  • 次は、x> 10などの論理テストである必要があります
  • 最後に、それは言葉で終わる必要があり、その後

NumberErrors> 20の場合

上記の英語またはVBAの規則に違反した場合、文法(英語)または構文(VBA)は正しくないと見なされます。

構文エラーを特定する方法

VBAエディターは構文エラーを赤で強調表示し、それらを簡単に識別して解決できるようにします。さらに、コードを実行したり、新しい行を開始したりしようとすると、以下の構文エラーメッセージが表示されます。

基本的な構文エラー:

基本構文エラー

構文エラーメッセージボックス:

構文エラーメッセージボックス

入力時にチェックが行われるようにするには、[オプション]メニューの[自動構文チェック]を有効にします。

自動構文チェック

構文エラーを解決する方法

構文エラーは、コードの特定の行の記述方法の誤りを表しています。コードを実行する前に、これらを修正する必要があります。経験を積むと、エラーを見つけるために必要なのは赤いテキストだけです。それでも問題が解決しない場合は、「ifステートメント構文vba」またはニーズに合ったバリエーションをオンラインで検索するだけで、書き込もうとしている特定の行の例がたくさん見つかります。

コンパイルエラーとは何ですか?

コンパイルエラーとは、構文エラーを含む、より広範なVBAエラーのグループを指します。コンパイルエラーは、全体として考えたときにコードの問題も特定します。個々の行の構文は正しい場合がありますが、まとめると、コードの行は意味をなしません。コードをコンパイルまたは実行すると、コンパイルエラーが強調表示されます。

コンパイルエラーを特定する方法

VBAコードを実行すると、以下の例のように、コンパイルエラーが[VBA]ダイアログボックスに表示されます。

または、プロジェクトが長く複雑で、複数のルーチンが含まれている場合は、実行する前にコードをコンパイルすると便利です。コードの半分が正常に実行された後、エラーがポップアップする状況を防ぎます。[デバッグ]メニュー→[VBAプロジェクトのコンパイル]をクリックして、VBAコードをコンパイルできます。

例1

IFステートメントの「Endif」部分が欠落している場合のコンパイルエラー。コード内の個々の行はすべて正しいですが、これらを合わせると、完全なIFステートメントを表すわけではありません。

コンパイルエラー-例1

例2

この例では、VBAコンパイルプロセスが構文エラーを検出しました。これは赤で強調表示されています。VBAは、以下のコードに関数の閉じ括弧がないことを示しています。

コンパイルエラー-例2

例3

コンパイルエラーは、Option Explicitを使用する場合によく発生し、変数が明示的に定義されていない場合に発生します。Option Explicitをアクティブにすると、コードで使用する前に、すべての変数を宣言するためにDimステートメントが必要になります。

コンパイルエラー-例3

コンパイルエラーを解決する方法

VBAコンパイルエラーにより、影響を受けるルーチンを実行できなくなります。それらを修正するまで、コードはVBAによって正しく解釈されません。エラーメッセージボックスは、構文エラーよりも役立つアドバイスを提供することがよくあります。

エラーメッセージから問題が何であるかがすぐにわからない場合は、Microsoftのヘルプセンターを使用して、ステートメントまたは関数の記述方法を正確に把握してください。これは、MicrosoftWebサイトの「Blockifwithoutendif」エラーメッセージの例です。

終わりがない場合はブロックする

ランタイムエラーとは何ですか?

構文エラーとコンパイルエラーを修正したら、コードを適切にテストまたは実行して、目的のアクションまたは計算がどの程度適切に実行されるかを確認する準備が整います。テスト期間、つまりコードのライブ実行を「ランタイム」と呼びます。

ランタイムエラーは、コードを見るだけでは検出できません。それらは、コードがその時点で特定の入力またはデータと相互作用した結果です。

ランタイムエラーは、多くの場合、予期しないデータがVBAコードに渡される、データ型が一致しない、予期しないゼロで除算される、定義されたセル範囲が使用できないことが原因で発生します。ランタイムエラーも、追跡および修正するのに最も多様で複雑です。

ランタイムエラーを特定する方法

VBAデバッグVBA:コードをデバッグする方法VBAコードを記述して実行するときは、ユーザーがコードエラーをデバッグする方法を学ぶことが重要です。コード関数が問題のあるコードを黄色で強調表示し、問題の原因についての小さな手がかりを提供することは、Excelユーザーの期待です。

例1

以下のコードは、単に1つの数値を別の数値で除算するだけですが、それが不可能な場合もあります。たとえば、セルA1 = 2およびセルA2 = 0の場合、ゼロで除算することはできません。ランタイムエラーボックスには、問題のあるコードを強調表示するデバッグボタンが含まれています。

ランタイムエラー-例1

ランタイムエラー-例1a

例2

この例では、ワークシートにn社の名前を収集する配列を作成しました。次に、実行時に存在する場合と存在しない場合がある6番目の項目を参照しようとしました。VBAはランタイムエラーメッセージを表示し、デバッグを押して問題を調査することができます。

ランタイムエラー-例2

デバッグを押すと、VBAは問題の原因となっているコード行を強調表示します。「添え字が範囲外です」というメッセージを使用して、何が問題になっているのかを突き止めるのは私次第です。添え字の範囲外エラーは、通常、コードは原則として適切であるが、探している特定のアイテムが見つからないことを意味します。最も一般的には、Excelのセルまたは範囲、およびVBAコードの配列を参照するときに発生します。

ランタイムエラー-例2a

デバッグ機能が有効になっていることを確認するには、[オプション]> [一般]> [エラートラップ]メニューで、デフォルトの状態を[未処理のエラーで中断]にする必要があります。オプションをオンのままにします。

未処理のエラーで中断

ランタイムエラーを解決する方法

ランタイムエラーは本質的に多様で複雑であるため、ソリューションもさまざまです。ランタイムエラーを減らすための2つの一般的な方法は次のとおりです。

エラートラッピング

コードで発生する可能性のあるシナリオを検討することをお勧めします。さらに良いのは、練習データまたは実際のユーザーでコードをテストすることです。エラーが存在するかどうかに応じて、コードがさまざまな結果に分岐することで、VBAでそのようなシナリオを認識できるようになります。

例1

ここで、「On Error Resume Next」行は、エラーが検出された場合でも、コードを強制的に続行します。次に、エラーが存在する場合にのみ、If Err> 0テストを使用して警告メッセージを作成します。'On Error Goto 0'は、VBAをデフォルトの状態にリセットします。

エラートラッピング-例1

例2

ここで、コードは、月収と定義された日数に基づいて、1日あたりの収入を計算しています。日数が指定されていない場合は、「NoDaysInMonthProvided:」というコード内の定義されたポイントにスキップします。ここでは、月の平均日数を基本的な仮定として使用します。単純化されていますが、エラーをトラップしてコード内の別のポイントにスキップする方法を明確に示しています。

エラートラッピング-例2

ユーザー指示をクリアする

明確なドキュメントとワークシートのラベルにより、ユーザーは意図した方法でモデルを操作できます。数字の代わりにテキストを入力したり、後でコードに影響を与える可能性のあるゼロを残したりするときに、それらを防ぐのに役立ちます。

概要

VBAには、さまざまな方法でコードに影響を与える可能性のある3つの主要なタイプのエラーがあります。デバッガーや自動構文チェックなど、VBAのエラー検出オプションをアクティブにすることが重要です。それらは、エラーの場所と性質を確立するのに役立ちます。

その他のリソース

ファイナンスは、グローバルなCertified Banking&Credit Analyst(CBCA)™CBCA™認定の公式プロバイダーです。CertifiedBanking&Credit Analyst(CBCA)™認定は、ファイナンス、アカウンティング、クレジット分析、キャッシュフロー分析をカバーするクレジットアナリストのグローバルスタンダードです。 、コベナンツモデリング、ローン返済など。誰もが世界クラスの金融アナリストになるのを支援するように設計された認定プログラム。あなたのキャリアを前進させ続けるために、以下の追加のリソースが役に立ちます:

  • #REFExcelエラー#REFExcelエラー#REFExcelエラーは、スプレッドシートで大きな問題を引き起こします。例とスクリーンショットを使用したこのクイックチュートリアルで、Excelで#REFエラーを見つけて修正する方法を学びます。#REF!エラー(「ref」は参照を表します)は、数式が存在しないセルを参照しているときにExcelが表示するメッセージで、
  • ExcelVBAの例ExcelVBAの例ExcelVBAを使用すると、ユーザーはExcel内のプロセスを自動化するマクロを作成できます。このガイドでは、Excel VBAの例を使用して、マクロを設定してマクロを記録する方法、変数を宣言する方法、およびデータを参照する方法を示します。
  • ExcelでVBAを作成するためのヒントExcelでVBAを作成するためのヒント以下に、ExcelでVBAを作成するための9つのヒントを示します。VBA for Excelは、カスタム計算と自動化に無数の可能性をもたらします。
  • VBAメソッドVBAメソッドVBAメソッドは、VBAオブジェクト、変数、またはデータ参照に添付されたコードの一部であり、そのオブジェクトに関連して実行するアクションをExcelに指示します。コピー、貼り付け、および選択は、実行できるVBAメソッドのほんの一例です。