次の方法で共有


エラー処理

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 列の値を使用する新しい最終レート列をサンプル データ ソースに作成することです。 エラーがある場合は、対応する [特別単価 ] 列の値が使用されます。

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

[カスタム列] ダイアログが開かれ、カスタム列には「try otherwise」数式が入力されたスクリーンショット。

この数式は 、標準レート 列の評価を試み、エラーが見つからない場合にその値を出力します。 標準単価列にエラーが見つかった場合、出力は otherwise ステートメントの後に定義された値になります。この場合は、特殊レート列です。

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

[最終レート] 列の特別なレートに置き換えられた標準レート エラーを示すテーブルのスクリーンショット。

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

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

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

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

#REF!エラーを除外する唯一の目的は、デモンストレーションの目的です。 この記事で紹介する概念を使用すると、エラー レコードから任意のフィールドを対象にすることができます。

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

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

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

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

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

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

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

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

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

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

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

  • Errors.HasErrorStandard Rate 列の値にエラーがあるかどうかを表示します。
  • すべての Errors.Value標準単価 列の値にエラーがない場合、この列には 標準単価 列の値が表示されます。 エラーのある値の場合、このフィールドは使用できません。展開操作中、この列には null 値があります。
  • すべての Errors.ErrorStandard Rate 列の値にエラーが発生した場合、この列には標準 単価 列の値のエラー レコードが表示されます。 エラーのない値の場合、このフィールドは使用できません。展開操作中、この列には null 値があります。

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

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

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

展開操作を実行すると、 すべての Errors.Error.Message フィールドに、各セルに含まれる Excel エラーを正確に示す特定のエラー メッセージが表示されます。 エラー メッセージは、エラー レコードの [エラー メッセージ ] フィールドから派生します。

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

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

  • All Errors.Error.Message 列の値が null と等しい場合、出力は Standard Rate 列の値になります。
  • それ以外の場合、[ All Errors.Error.Message ] 列の値が Invalid cell value '#REF!'.等しくない場合、出力は [特別率 ] 列の値になります。
  • それ以外の場合は 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 and catch 構文のアプローチを示す新しい数式を含むカスタム列ダイアログのスクリーンショット。