我已经创建了以下公式,但它不起作用:
=IF(AND(G2<41,L2<41),4,IF(AND(G2>40,G2<81),AND(L2>40,L2<81),5,IF(AND(G2>80,L2>80),6,IF(AND(G2>41,G2>81),AND(L2>80),7,IF(AND(G2<41,L2>40),AND(L2<81),8,IF(AND(G2<41,L2>80),9,IF(AND(G2>80,L2>40),AND(L2<81),3,IF(AND(G2>40,G2<81),AND(L2<41),2,IF(G2>81,L2<41),1,0)
有人能帮我改进这个公式吗?
答案1
由于 AND 是二元运算符,需要至少两个参数来测试是否同时为真,因此有四种具有单一条件的构造是错误的:
AND(L2>80), AND(L2<81), AND(L2<81), AND(L2<41)
在结构上
AND(G2>41,G2>81)
仅当 G2>81 时才成立,因此第一部分 G2>41 是不必要的,除非它应该是 AND(G2>41,G2<81)
对于错误的构造,例如
IF(AND(G2>41,G2<81),AND(L2>80)
你应该使用
IF( AND( AND(G2>41,G2<81),L2>80))
这将首先测试 G2 是否 >41 以及 <81,如果成立,还将检查 L2 是否也 >80
答案2
如果将个位数作为真实测试的“结果”,然后按如下格式格式化表达式(公式):
=如果( AND(G2<41,L2<41),4, # 别的 如果(AND(G2>40,G2<81),AND(L2>40,L2<81),5, # 别的 如果(并且(G2>80,L2>80),6, # 别的 如果(AND(G2>41,G2>81),AND(L2>80),7, #别的 如果(并且(G2<41,L2>40)并且(L2<81)8, # 别的 如果(并且(G2<41,L2>80),9, #别的 如果(AND(G2>80,L2>40),AND(L2<81),3, #别的 如果(并且(G2>40,G2<81),并且(L2<41),2, # 别的 如果(G2>81,L2<41),1, # 别的 0)
...那么问题出在哪里就应该很清楚了。
请注意,IF() 采用一个表达式并尝试它是 TRUE 还是 FALSE,然后返回剩余两个参数中的相应一个。
我建议表达式/公式尽可能简短 - 否则很容易变得“一团糟” - 例如这里。
这与使用“智能代码”进行编程的情况非常相似,即补救措施是:“KISS”(保持简单愚蠢)。
答案3
你的公式应该像这样写:
=IF(AND(G2<41,L2<41),4,IF(AND(G2>40,G2<81,L2>40,L2<81),5,IF(AND(G2>80,L2>80),6,IF(AND(G2>41,G2<=81,L2>80),7,IF(AND(G2<41,L2>40,L2<81),8,IF(AND(G2<41,L2>80),9,IF(AND(G2>80,L2>40,L2<81),3,IF(AND(G2>40,G2<81,L2<41),2,IF(AND(G2>81,L2<41),1,0)))))))))
笔记:
- 我做了一点修改,而不是
如果(并且(G2>41,G2>81,L2>80),7
我曾经这样写过,
如果(并且(G2>41,G2<=81,L2>80),7
因为之前的逻辑 And(G2>80, L2>80)
与6
IF(AND(G2>41,G2>81,L2>80),7