Power Apps での IfError および IsError 関数

[この記事はプレリリース ドキュメントであり、変更されることがあります。]

エラーを検出し、代替値を提供するか、またはアクションを実行します。

注意

IfError

IfError 関数は、エラーが見つかるまで値をテストします。 関数がエラーを検出した場合、関数は対応する置換値を評価して返し、それ以降のさらに詳しい評価を停止します。 エラーが見つからない場合は、既定値を指定することもできます。 IfError の構造は If 関数の構造に似ています: IfError はエラーをテストし、Iftrue をテストします。

IfError を使用してエラーを有効な値に置き換えて、下流の計算を続行できるようにします。 たとえば、ユーザー入力がゼロによる除算になる可能性がある場合は、次の関数を使用します。

IfError( 1/x, 0 )

x の値がゼロの場合 1/x はエラーを生成するため、この数式は 0 を返します。 x がゼロでない場合、1/x が返されます。

以降の処理を停止する

次のように数式を動作の数式 で一緒にチェーン する場合:

Patch( DS1, ... );
Patch( DS2, ... )

DS1 への Patch が 失敗しても DS2 への 2 つ目の Patch 関数が試行されます。 エラーの範囲は、連鎖された各数式に制限されます。

IfError を使用してアクションを実行し、アクションが成功した場合にのみ処理を続行します。 この例に IfError を適用します:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

DS1Patch に問題がある場合、1 つ目の Notify が実行されます。 DS2 の 2 つ目の Patch を含む以降の処理は行なわれません。 1 つ目の Patch が成功した場合、2 つ目の Patch が実行されます。

指定した場合、エラーが検出されない場合は、任意の DefaultResult 引数が返されます。 この引数がなければ、最後の引数が返されます。

最後の例を基にして、IfError からの戻り値を照合して問題があったかどうかを特定することができます。

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

種類の互換性

IfError はその引数の 1 つの値を返します。 IfError によって返される可能性があるすべての値の種類は互換性がなければなりません。

最後の例で、PatchReplacement 数式または DefaultResult で使用されたブール値と互換性のないレコードを返します。 これらの Patch 呼び出しからの戻り値が IfError によって返されるという状況はないので、これは問題ありません。

注意

変更の動作中の間、現在 IfError へのすべての引数の種類は互換性がある必要があります。

前述の簡単な例では:

IfError( 1/x, 0 )

1/x および 0 の種類は、両方ともテキスト文字例であったため互換性がありました。 そうでない場合、2 つ目の引数は最初の引数の種類と一致するように強制されます。

Excel に #DIV/0! が表示されます ゼロによる除算が発生すると。

代わりに、次のように IfError を検討します。

IfError( 1/x, "#DIV/0!" )

上記の数式は機能しません。 テキスト文字列 "#DIV/0!" は、最初の引数の種類を IfErrorに強制され、それは数値です。 IfError の結果はテキスト文字列を強制できないため、さらに別のエラーとなります。 修正として、最初の引数をテキスト文字列に変換して、IfError が常にテキスト文字列を返すようにします。

IfError( Text( 1/x ), "#DIV/0!" )

上に示すように、Replacement または DefaultResult がエラーの場合、IfError はエラーを返すことができます。

ErrorInfo

置換数式の中で、ErrorInfo レコードは、見つかったエラーに関する情報を提供します。 このレコードには次のものが含まれます。

ErrorInfo フィールド 種類​​ 内容
コントロール テキスト文字列 エラーが発生した場所を報告するために使用される現在のコントロールの名前。
種類 ErrorKind 列挙 (数値) エラーの分類。
メッセージ テキスト文字列 エンド ユーザーに表示するのに適した、エラーに関するメッセージ。
Notify Boolean IfError によってキャッチされなかった場合、エンド ユーザー通知バナーが表示されるべきかどうか。
プロパティ テキスト文字列 エラーが発生した場所を報告するために使用される現在のプロパティの名前。

たとえば、次の数式を Button コントロールの OnSelect プロパティとして検討します。

IfError( 1/0, Notify( "Internal error: " & ErrorInfo.Control & "." & ErrorInfo.Property ) )

上記の数式の例では、ボタンがアクティブ化されると次のバナーを表示します。

Button コントロールがアクティブ化され、Notify 関数から通知が表示される

IsError

IsError 関数はエラー値をテストします。 戻り値は、ブール値の true または false です。

IsError を使用すると、エラーの以降の処理が実行されなくなります。

構文

IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )

  • Value(s) – 必須。 エラー値をテストする数式。
  • Replacement(s) – 必須。 評価する数式、および一致するの引数がエラーを返した場合に返される値。
  • DefaultResult – オプション。 数式にエラーが見つからないかどうかを評価する数式。

IsError( Value )

  • Value – 必須。 エラー値をテストする数式。

簡単な IfError

計算式 内容 結果
IfError( 1, 2 ) 最初の引数は、エラーではありません。 この関数には、チェックする他のエラーおよび既定の戻り値はありません。 関数は、評価された最後の引数を返します。 1
IfError( 1/0, 2 ) 最初の引数は、(ゼロによる除算のため) エラー値を返します。 関数は 2 番目の引数を評価し、結果として返します。 2
IfError( 10, 20, 30 ) 最初の引数は、エラーではありません。 関数には、チェックする他のエラーはありませんが、既定の戻り値はあります。 関数は、DefaultResult 引数を返します。 30
IfError( 10, 11, 20, 21, 300 ) 最初の引数 10 はエラーではないので、関数はその引数の対応する置換である 11 を評価しません。 3 番目の引数 20 もエラーではないので、関数はその引数の対応する置換である 21 を評価しません。 5 番目の引数 300 には対応する置換がなく、既定の結果です。 数式にはエラーを含まないため、関数はその結果を返します。 300
IfError( 1/0, Notify( "There was an internal problem" ) ) 最初の引数は、(ゼロによる除算のため) エラー値を返します。 関数は 2 番目の引数を評価し、ユーザーにメッセージを表示します。 IfError の戻り値は Notify の戻り値であり、IfError の最初の引数 (数値) と同じ種類に強制されます。 1

簡単な IsError

計算式 内容 結果
IsError( 1 ) 引数は、エラーではありません。 false
IsError( 1/0 ) 引数が、エラーです。 True
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) IsError の引数は、(ゼロによる除算のため) エラー値を返します。 この関数は true を返し、これにより IfNotify 関数でユーザーにメッセージを表示するようになります。 If の戻り値は Notifyの戻り値であり、If の最初の引数 (ブール値) と同じ種類に強制されます。 True

手順

  1. テキスト入力 コントロールを追加し、既定でその名前が付いていない場合は TextInput1 という名前を付けます。

  2. Label コントロールを追加し、既定でその名前が付いていない場合は Label1 という名前を付けます。

  3. Label1Text プロパティを次の数式に設定します。

    IfError( Value( TextInput1.Text ), -1 )
    
  4. TextInput1 に、1234 を入力します。

    Label1 は Value 関数への有効な入力値として 1234 の値を表示します。

  5. TextInput1 に、ToInfinity を入力します。

    Label1 は Value 関数への有効な入力値ではないため -1 の値を表示します。 Value 関数を IfError で折り返さない場合、エラー値が空白として扱われるためラベルには値が表示されません。

関連項目

Power Apps 向けの数式のリファレンス