Power Apps の IfError、IsError、および IsBlankOrError 関数

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

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

注意

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/x0 の種類は両方とも数字であるため互換性がありました。 そうでない場合、2 つ目の引数は最初の引数の種類と一致するように強制されます。

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

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

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

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

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

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

FirstError / AllErrors

置換式の中で、FirstError レコードと AllErrors テーブルは、検出されたエラーに関する情報を提供します。 レコードには次のものが含まれます。

FirstError フィールド タイプ 内容
種類 ErrorKind 列挙 (数値) エラーの分類。
メッセージ テキスト文字列 エンド ユーザーに表示するのに適した、エラーに関するメッセージ。
Source テキスト文字列 ControlName.PropertyName というフォーマットにあり、エラーが発生した場所で、レポートに使用されます。
Observed テキスト文字列 ControlName.PropertyName というフォーマットにあり、エラーがユーザーに表示された場所で、レポートに使用されます。

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

Set( a, 1/0 )

この式は Button コントロールの OnSelect プロパティに適用されます。

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

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

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

通常、式でエラーが発生した場合、それは 1 つのエラーです。 しかし、たとえば数式のチェーン演算子 またはConcurrent 関数 が使用されている場合、複数のエラーが返される可能性があるシナリオがあります。 そのような場合は、アプリは AllErrors テーブルを使用し、そのレコードには、FirstError レコードと同じフィールドがあってエラーに対応します。

IsError

IsError 関数はエラー値をテストします。

戻り値は、ブール値の true または false です。

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

IsBlankOrError

IsBlankOrError 関数は、空白値またはエラー値のいずれかをテストし、Or( IsBlank( X ), IsError( X ) ) と同等のものです。

既存のアプリに対するエラー処理を有効化する際、IsBlankIsBlankOrError で置き換えて既存アプリの動向を保存することを検討してください。 エラー処理を追加する前に、空欄 の値は、データベースからの null 値とエラー値の両方を表すために使用されました。 エラー処理は、これら 2 つの 空欄 の解釈を分離します。これは、引き続き IsBlank を使用する既存のアプリの動作が変わる可能性があります。

戻り値は、ブール値の true または false です。

IsBlankOrError を使用すると、エラーのそれ以上の処理を防ぎます。

構文

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

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

IsError( Value )
IsBlankOrError( )

  • 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 ) 引数は、エラーではありません。
IsError( Blank() ) この引数は空白ですが、エラーではありません。
IsError( 1/0 ) 引数が、エラーです。
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) IsError の引数は、(ゼロによる除算のため) エラー値を返します。 この関数は true を返します。これは If を使用してユーザーに Notify 関数でメッセージを表示します。 If の戻り値は Notify の戻り値であり、If の最初の引数 (ブール値) と同じ種類に強制されます。

Simple IsBlankOrError

内容 結果
IsBlankOrError( 1 ) この引数は、エラーでも空白でもありません。
IsBlankOrErrro( Blank() ) この引数は空白です。
IsBlankOrError( 1/0 ) 引数が、エラーです。

手順

  1. Text Input コントロールを追加し、既定でその名前が付いていない場合は 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 向けの数式のリファレンス