ネストされた 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 タブの一部を指し、次のようになります。
式の目的:
- この行の最初の送信メールが適用できないこのセルには適用できない。
- 最初に送信されたメールが保留中このセルには保留中
その他の関数はすべて、概要ワークシートではなく、ターゲット ワークシートの内容に関連しています。
- すべての要素がマークされている場合始まっていない、概要のA414セルには次のように表示されます。始まっていない
- すべての要素がマークされている場合完了、概要セルには次のように表示されます完了。
- その他の組み合わせ(例:進行中、 半分完了& 半分始まっていない)概要セルには次のように表示されます進行中。
答え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 件の発生を探すことです。