有什么方法比嵌套的 if 语句更好(更易于阅读和维护且资源密集程度更低)来做我需要的事情吗?
右边 4 列的公式都一样,只是引用了不同选项卡的不同部分,但工作方式完全相同。“初始已发送电子邮件”列由用户选择(数据验证)。突出显示的公式是:
=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
您的公式没有完全涵盖您的描述。以下是针对您描述的场景的公式:
=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 个单元格未“启动”的出现位置。