英語で読む

次の方法で共有


エラー処理

Excel や DAX 言語に IFERROR 関数があるのと同様に、Power Query にも、エラーをテストしてキャッチするための独自の構文があります。

Power Query でのエラーの処理に関する記事で説明されているように、エラーはステップ レベルまたはセル レベルで発生する可能性があります。 この記事では、独自のロジックに基づいてエラーをキャッチして管理する方法に焦点を当てます。

注意

この概念を示すために、この記事では、そのデータ ソースとして Excel ブックを使用します。 ここに示されている概念は、Excel ブックから取得された値だけでなく、Power Query でのすべての値に適用されます。

このデモのサンプル データ ソースは、次の表を含む Excel ワークブックです。

3 つのエラーを含む Excel ブックのサンプル データのスクリーンショット。

Excel ワークブックのこのテーブルには、標準レート列に#NULL!#REF!#DIV/0! などの Excel エラーがあります。 このテーブルを Power Query エディターにインポートすると、次の図にどのように表示されるかを示します。

Power Query に読み込まれたサンプル テーブルのスクリーンショット。

Excel ブックのエラーが、各セル内の [Error] 値にどのように表示されているかに注意してください。

この記事では、エラーを別の値に置き換える方法について説明します。 さらに、エラーをキャッチし、それを独自のロジックに使用する方法についても説明します。

エラーを見つけたときに代替値を提供する

この場合の目標は、Standard Rate 列の値を使用する新しい Final Rate 列をサンプル データ ソースに作成することです。 エラーがある場合は、対応する Special Rate 列の値が使用されます。

新しいカスタム列を作成するには、[列の追加] メニューに移動し、[カスタム列] を選択します。 [カスタム列] ウィンドウで、数式 try [Standard Rate] otherwise [Special Rate] を入力します。 この新しい列に「Final Rate」という名前を付けます。

[カスタム列] ダイアログが開き、それ以外の場合はカスタム列に数式が入力されたスクリーンショット。

この数式では Standard Rate 列の評価を試み、エラーが検出されなければその値を出力します。 Standard Rate 列でエラーが検出された場合は、otherwise ステートメントの後に定義されている値 (この場合は Special Rate 列) が出力されます。

テーブル内のすべての列に正しいデータ型を追加すると、最終的なテーブルは次の画像のようになります。

Final Rate 列の Special Rate に置き換えられた Standard Rate エラーを含むテーブルのスクリーンショット。

注意

別の方法として、式 try [Standard Rate] catch ()=> [Special Rate]を入力することもできます。これは前の式と同等ですが、パラメーターを必要としない関数で catch キーワードを使用します。

catch キーワードは、2022 年 5 月に Power Query に導入されました。

独自の条件付きエラー ロジックを提供する

前のセクションと同じサンプル データ ソースを使用して、新しい目標は、[Final Rate] の新しい列を作成することです。 Standard Rate の値が存在する場合は、その値が使用されます。 それ以外の場合は、#REF! エラーが存在する行を除き、Special Rate 列の値が使用されます。

注意

#REF! エラーを除外する唯一の目的は、デモンストレーションのためです。 この記事で紹介されている概念を使用すると、エラー レコードから任意のフィールドを選択してターゲットにすることができます。

エラー値の横にある空白のどこかを選択すると、画面の下部に詳細ウィンドウが表示されます。 この詳細ウィンドウには、エラーの理由 DataFormat.Error とエラー メッセージ Invalid cell value '#REF!' の両方が含まれています。

選択されたエラーのスクリーンショット。ダイアログの下部にエラー メッセージが表示されています。

一度に 1 つのセルしか選択できないため、実質的には、一度に 1 つのエラー値のエラー コンポーネントのみを調べることができます。 ここで新しいカスタム列を作成し、try 式を使用します。

カスタム ロジックで try を使用する

新しいカスタム列を作成するには、[列の追加] メニューに移動し、[カスタム列] を選択します。 [カスタム列] ウィンドウで、数式 try [Standard Rate] を入力します。 この新しい列に「All Errors」という名前を付けます。

[カスタム列] ダイアログが開き、カスタム列に試行式が入力されているスクリーンショット。

try 式では、値とエラーを、try 式でエラーが処理されたかどうかを示すレコード値と、適切な値またはエラー レコードに変換します。

All Errors 列が追加され、エラーが [Record] として表示されているテーブルのスクリーンショット。

列ヘッダーの横にあるアイコンを選択することにより、この新しく作成された列をレコード値で展開し、展開に使用できるフィールドを確認できます。

展開アイコンが強調され、[HasError]、[値]、[エラー] ボックスが選択されている [すべてのエラー] 列のスクリーンショット。

この操作により、次の 3 つの新しいフィールドが公開されます。

  • All Errors.HasError - Standard Rate 列の値にエラーがあるかどうかを表示します。
  • All Errors.Value - Standard Rate 列の値にエラーがない場合、この列には Standard Rate 列の値が表示されます。 エラーがある値の場合、このフィールドは使用できず、展開操作中のこの列の値は null になります。
  • All Errors.Error - Standard Rate 列の値にエラーがあった場合、この列には Standard Rate 列の値のエラー レコードが表示されます。 エラーがない値の場合、このフィールドは使用できず、展開操作中のこの列の値は null になります。

列の新しいフィールドを含むテーブルのスクリーンショット。1 つの All.Errors.Error 値が選択され、テーブルの下にエラー メッセージが表示されています。

さらに調査を行う場合は、[All Errors.Error] 列を展開して、エラー レコードの次の 3 つのコンポーネントを取得できます。

  • エラーの理由
  • エラー メッセージ
  • エラーの詳細

展開操作を行うと、[All Errors.Error.Message] フィールドには、各セルにどのような Excel エラーがあるかを正確に伝える特定のエラー メッセージが表示されます。 このエラー メッセージは、エラー レコードの [エラー メッセージ] フィールドから派生しています。

特定のエラー メッセージが表示されたスクリーンショット。

これで、新しい列に各エラー メッセージが表示されたので、次の句を含む [Final Rate] という名前の新しい条件列を作成できます。

  • All Errors.Errors.Message 列の値が null と等しい場合は、Standard Rate 列の値が出力されます。
  • それ以外の場合、All Errors.Errors.Message 列の値が Invalid cell value '#REF!'. と等しくない場合、出力は Special Rate 列の値になります。
  • それ以外の場合は、null になります。

[条件列の追加] ダイアログのスクリーンショット。新しい列に対してすべてのエラー条件が設定されています。

AccountStandard RateSpecial Rateおよび Final Rate 列のみを保持し、各列に正しいデータ型を追加した後 , 次の画像は、最終的なテーブルがどのようになるかを示しています。

適切なデータ型を持つその他の列を含む最終的なテーブルのスクリーンショット。

カスタム ロジックで trycatch を使用する

あるいは、 tryおよびcatch キーワードを使用して新しいカスタム列を作成することもできます。

try [Standard Rate] catch (r)=> if r[Message] <> "Invalid cell value '#REF!'." then [Special Rate] else null

Try 構文と catch 構文のアプローチを示す新しい数式を含むカスタム列ダイアログ。

その他のリソース