and ステートメントを使用して複数の iferror ステートメントを記述する方法

and ステートメントを使用して複数の iferror ステートメントを記述する方法

下記のネストされた数式では、各数式を IFERROR ステートメントで囲もうとしています。他のソースを確認したところ、2 つの数式の間にコンマを入れることでこれを行うことができることがわかりました。混乱しているのは、& " "各 if ステートメントの間に があることだと思います (これは保持する必要があります)。

以下は、私が試してみたオリジナルの処方と最新の処方です。処方がうまくいきません。これを適切に行う方法がわかりません。何が間違っているのでしょうか?

オリジナルフォーミュラ

=TRIM(
IFERROR(
IF(AND($T9-TODAY()>=Key!$N$14,$T9-TODAY()<=Key!$M$14,$AA9<>"Complete",$G9<>"New Phase"),Key!$L$11,"")
& " "
& IF(AND($U9-TODAY()>=Key!$N$15,$U9-TODAY()<=Key!$M$15,$AB9<>"Complete",$G9<>"New Phase"),Key!$L$10,"")
& " "
& IF(AND($M9-TODAY()>=Key!$N$9,$M9-TODAY()<=Key!$M$9,$Z9<>"Complete"),Key!$L$9,"")
& " "
& IF(AND($AH9-TODAY()>=Key!$N$16,$AH9-TODAY()<=Key!$M$16,$AE9<>"Complete"),Key!$L$16,"")
,"error"))

新しいフォーミュラ

=TRIM(
IFERROR(
IF(AND($T9-TODAY()>=Key!$N$14,$T9-TODAY()<=Key!$M$14,$AA9<>"Complete",$G9<>"New Phase"),Key!$L$11,"")
,"Error MUC Video")),
& " "
IFERROR(
& IF(AND($U9-TODAY()>=Key!$N$15,$U9-TODAY()<=Key!$M$15,$AB9<>"Complete",$G9<>"New Phase"),Key!$L$10,"")
,"Error SMR Video"))
& " "
& IF(AND($M9-TODAY()>=Key!$N$9,$M9-TODAY()<=Key!$M$9,$Z9<>"Complete"),Key!$L$9,"")
& " "
& IF(AND($AH9-TODAY()>=Key!$N$16,$AH9-TODAY()<=Key!$M$16,$AE9<>"Complete"),Key!$L$16,"")

答え1

読みやすくするためにフォーマットされた、大きくて乱雑な数式があります。まずは、読みやすくするために、数式を短くしてみましょう。まず、大きな AND ステートメントをすべて削除しましょう。

=TRIM(
IFERROR(
IF(AND(a1,a2,a3,a4),a99,"")
& " "
& IF(AND(b1,b2,b3,b4),b99,"")
& " "
& IF(AND(c1,c2,c3),c99,"")
& " "
& IF(AND($d1,d2,d3),d99,"")
,"error"))

実際には、それらを完全に削除しましょう。AND 数式の代わりに 1 つの代替式を使用します。

=TRIM(
IFERROR(
IF(a1,a99,"")
& " "
& IF(b1,b99,"")
& " "
& IF(c1,c99,"")
& " "
& IF(d1,d99,"")
,"error"))

これで、ずっと簡単に理解できるようになりました。TRIM はスペースを削除し、IFERROR はエラーをキャッチします。IFERROR の中身は何でしょうか? 複数の文字列を連結したものです。

IF(a1,a99,"") & " " & IF(b1,b99,"") & " " & IF(c1,c99,"") & " " & IF(d1,d99,"")

各 IF の間にスペースがあるのがわかりますか? 文字列を結合するには、文字列の間にアンパサンドを入れるだけです&。この場合、文字列は IF が返すものとスペースになります" "

ここで、IF の 1 つを IFERROR でラップするとします。質問でどのようにラップするかを見てみましょう。ここでも少し単純化してみます。

=TRIM(
IFERROR(
IF(AND(a1,a2,a3,a4),a99,"")
,"Error MUC Video")),
& " "
IFERROR(
& IF(AND(b1,b2,b3,b4),b99,"")
,"Error SMR Video"))
& " "
& IF(AND(c1,c2,c3),c99,"")
& " "
& IF(AND($d1,d2,d3),d99,"")

( )最後に 1 しかないので、どこかで括弧が間違っていることがすでにわかります。今はそれを無視して、IFERROR の部分だけを扱いましょう。上記のようにさらに単純化できます。

=TRIM(
IFERROR(
IF(a1,a99,"")
,"Error MUC Video")),
& " "
IFERROR(
& IF(b1,b99,"")
,"Error SMR Video"))
& " "
& IF(c1,c99,"")
& " "
& IF(d1,d99,"")

それでもまだ少し読みにくいですね。次のようにフォーマットしたらどうでしょうか。

=TRIM(
      IFERROR(
              IF(a1,a99,""),"Error MUC Video"
             )
     ),
 & " "
 IFERROR(
         & IF(b1,b99,""),"Error SMR Video"
        )
 )
 & " "
 & IF(c1,c99,"")
 & " "
 & IF(d1,d99,"")

最初のIFERRORの後の括弧はTRIM関数を閉じます。2
番目のIFERRORにはアンパサンドがあります。& 内部関数の前にある必要があります。2
番目の IFERROR の後の括弧が、どの開き括弧
とも一致していません。閉じ括弧の後のカンマも、そこにあってはいけません。TRIM
関数の閉じ括弧がありません。
数式は次のようになります。

TRIM( IFERROR() & " " & IFERROR() & " " & IF() & " " & IF() )

これらすべてを考慮すると、finally 式は次のようにフォーマットするのが最適だと思います。

=TRIM(
IFERROR(IF(AND($T9-TODAY()>=Key!$N$14,$T9-TODAY()<=Key!$M$14,$AA9<>"Complete",$G9<>"New Phase"),Key!$L$11,""),"Error MUC Video")
& " " & 
IFERROR(IF(AND($U9-TODAY()>=Key!$N$15,$U9-TODAY()<=Key!$M$15,$AB9<>"Complete",$G9<>"New Phase"),Key!$L$10,""),"Error SMR Video")
& " " & 
IF(AND($M9-TODAY()>=Key!$N$9,$M9-TODAY()<=Key!$M$9,$Z9<>"Complete"),Key!$L$9,"")
& " " & 
IF(AND($AH9-TODAY()>=Key!$N$16,$AH9-TODAY()<=Key!$M$16,$AE9<>"Complete"),Key!$L$16,"")
)

最後の 2 つの IF ステートメントを独自の IFERROR で囲む場合は、最初の 2 つと同じ方法でフォーマットします。各部分を独自の行に保持します。


次回、大きな数式でこのような問題が発生した場合は、上記のように数式を大幅に削減して、エラーを簡単に見つけられるようにしてください。

関連情報