此示例中嵌套 IF 语句的最佳替代是什么?

此示例中嵌套 IF 语句的最佳替代是什么?

有什么方法比嵌套的 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. 如果此行的“初始发送的电子邮件”是不适用这个单元格应该说不适用
  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 个单元格未“启动”的出现位置。

相关内容