この例では、ネストされた IF ステートメントの最適な代替手段は何ですか?

この例では、ネストされた IF ステートメントの最適な代替手段は何ですか?

ネストされた if ステートメントの代わりに、必要なことを実行するより良い方法 (読みやすく、保守しやすく、リソースをあまり消費しない方法) は何でしょうか? ここに画像の説明を入力してください

右側の 4 つの列の数式はすべて同じで、異なるタブの異なる部分を参照しているだけですが、すべてまったく同じように機能します。[Initial Email Sent] 列は、ユーザーによって選択されます (データ検証)。強調表示された数式は次のとおりです。

 =IF(OR([Initial Email Sent]="on hold",[Initial Email Sent]="not applicable"),[@[Initial Email
 Sent]],IF(COUNTIF(a414engagement[Status],"<>Not Applicable")=0,"Not
 Applicable",(IF((COUNTIF(a414engagement[Status],"Not
 Started")+(COUNTIF(a414engagement[Status],"In
 Progress"))=0),"Completed",(IF(COUNTIF(a414engagement[Status],"In
 Progress")+(COUNTIF(a414engagement[Status],"Completed"))>0,"In
 Progress","Not Started"))))))

ちょっと長いですね。これは A414 タブの一部を指し、次のようになります。 ここに画像の説明を入力してください

式の目的:

  1. この行の最初の送信メールが適用できないこのセルには適用できない
  2. 最初に送信されたメールが保留中このセルには保留中

その他の関数はすべて、概要ワークシートではなく、ターゲット ワークシートの内容に関連しています。

  1. すべての要素がマークされている場合始まっていない、概要のA414セルには次のように表示されます。始まっていない
  2. すべての要素がマークされている場合完了、概要セルには次のように表示されます完了
  3. その他の組み合わせ(例:進行中、 半分完了& 半分始まっていない)概要セルには次のように表示されます進行中

答え1

数式では説明を完全にはカバーできません。説明したシナリオの数式は次のとおりです。

=IF( OR( [Initial Email Sent]="on hold", [Initial Email Sent]="not applicable" ), [@[Initial Email Sent]], IF( COUNTIF( a414engagement[Status], "<>Not Started" )=0, "Not Started", IF( COUNTIF( a414engagement[Status], "<>Completed" )=0, "Completed", "In progress" ) ) )

あるいはもっと分かりやすいかもしれません:

=IF(
    OR(
        [Initial Email Sent]="on hold",
        [Initial Email Sent]="not applicable"
    ),
    [@[Initial Email Sent]],
    IF(
        COUNTIF(
            a414engagement[Status],
            "<>Not Started"
        )=0,
        "Not Started",
        IF(
            COUNTIF(
                a414engagement[Status],
                "<>Completed"
            )=0,
            "Completed",
            "In progress"
        )
    )
)

ここでの秘訣は、「開始されていない」ものをすべてカウントするのではなく、セルが「開始されていない」状態ではない 0 件の発生を探すことです。

関連情報