如果(和)组合产生您为该函数输入了太多参数

如果(和)组合产生您为该函数输入了太多参数

我已经创建了以下公式,但它不起作用:

=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)6IF(AND(G2>41,G2>81,L2>80),7

相关内容