我正在尝试编写一个复杂的IF
THEN
语句。如果是 A,则根据参数创建文本。如果是 B,则根据不同的参数创建文本。如果是 C,则根据一组新参数创建文本。下面的语言都可以单独使用 - 我无法“失败”并在第一个 IF 上进入第二个。有人知道怎么做吗?谢谢!
IF([@[Pre-Post Aug 2019]]="Aug 2019 Month",
IF(AND(W2>=DATEVALUE("07/22/2018"),W2<=DATEVALUE("07/28/2019")),"BA Week 1",IF(AND(W2>=DATEVALUE("07/29/2019"),W2<=DATEVALUE("08/04/2019")),"BA Week 2",IF(AND(W2>=DATEVALUE("08/05/2019"),W2<=DATEVALUE("08/12/2019")),"BA Week 3",IF(AND(W2>=DATEVALUE("08/13/2019"),W2<=DATEVALUE("08/20/2019")),"BA Week 4",IF(AND(W2>=DATEVALUE("08/21/2019"),W2<=DATEVALUE("08/28/2019")),"BA Week 5",
"Something Else")))))))))))))
IF([@[Pre-Post Aug 2019]]="Pre Aug 2019 Month",
IF(AND([@[BA: Day]]>0,[@[BA: Day]]<6),"BA Week 2",
IF(AND([@[BA: Day]]>29,[@[BA: Day]]<32),"BA Week 2",
IF(AND([@[BA: Day]]>5,[@[BA: Day]]<14),"BA Week 3",
IF(AND([@[BA: Day]]>13,[@[BA: Day]]<22),"BA Week 4",
IF(AND([@[BA: Day]]>21,[@[BA: Day]]<30),"BA Week 1",
IF([@[BA: Day]]>31,"Check It",
"Something Else")))))))))))))
IF([@[Pre-Post Aug 2019]]="Post Aug 2019 Month",
IF(AND([@[BA: Day]]>28,[@[BA: Day]]<31),"BA Week 1",
IF(AND([@[BA: Day]]>0,[@[BA: Day]]<6),"BA Week 1",
IF(AND([@[BA: Day]]>5,[@[BA: Day]]<13),"BA Week 2",
IF(AND([@[BA: Day]]>12,[@[BA: Day]]<21),"BA Week 3",
IF(AND([@[BA: Day]]>20,[@[BA: Day]]<29),"BA Week 4",
IF([@[BA: Day]]>31,"Check It",
"Something Else")))))))))))))
答案1
从记忆中看,您不能将 IF 嵌套超过 7 层。但这可能是对旧版本的模糊记忆,现在的限制可能更高。
无论如何,所有那些符合 AND(foo>bar, foo) 的位
还要注意,你的数字范围是相互排斥的,因此其中没有两个可以同时为真。因此,
IF(A, do thing for A, [else]IF(B, ...IF(C,...
全部嵌套起来,您可以采取一些措施使它们保持独立而不是嵌套,然后将结果连接起来,例如:
IF(A,result for A,"") & IF(B,result for B,"") & IF(C, etc
这种方式效率稍低,因为它们都必须进行求值,但您的示例似乎表明测试非常简单,没有查找等“昂贵”的功能。因此,所有表达式都经过求值,除了一个表达式外,其他所有表达式都返回“”,因此您最终只得到所需的表达式,但您一次不使用多个嵌套级别,并且应该能够将三个部分放在一起。
您甚至可以对顶层部分执行相同的操作,因为它们似乎针对三种不同的可能选项测试同一件事 - 只需获取您所拥有的内容并使用 & 将它们连接在一起