エラー処理

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

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

Note

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

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

Excel のサンプル データ。

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

Power Query でのサンプル テーブル。

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

この記事では、エラーを別の値に置き換える方法を学習します。 さらに、エラーを捕捉し、それを独自のロジックに使用する方法も学びます。

この場合の目標は、標準レート 列の値を使用する新しい 最終レート 列を作成することです。 何らかのエラーが存在する場合は、対応する [Special Rate] 列の値が使用されます。

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

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

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

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

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

テーブル内のすべての列に正しいデータ型を追加した後の、最終的なテーブルの外観を次の図に示します。

try otherwise の最終的なテーブル。

Note

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

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

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

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

Note

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

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

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

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

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

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

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

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

try のレコード値。

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

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

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

  • All Errors.HasError - Standard Rate 列の値にエラーがあるかどうかを表示します。
  • All Errors.Value - 標準レート 列の値にエラーがない場合、この列には 標準レート 列の値が表示されます。 エラーがある値の場合、このフィールドは使用できず、展開操作中のこの列の値は null になります。
  • すべてのエラー.エラー - 標準レート 列の値にエラーがあった場合、この列には 標準レート 列の値のエラー レコードが表示されます。 エラーがない値の場合、このフィールドは使用できず、展開操作中のこの列の値は 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 構文のアプローチを示す新しい数式を含むカスタム列ダイアログ。

その他のリソース