我将列I作为计算列,这是我当前编写的内容。 这什么也没给我。
Task
逻辑是如果B2和D2不为空,则乘以b2 * d2
如果B2不为空,D2为空,则b2 * c2
如果B2为空而D2不为空,则a2 * d2
其他a2 * c2
有什么办法可以使此代码起作用?
谢谢
答案 0 :(得分:2)
替代方法或重写公式:
=IF(AND(B2<>"",D2<>""),B2*D2,IF(D2="",IF(B2<>"",B2*C2,A2*C2),IF(D2<>"",A2*D2,A2*C2)))
=IF(AND(B2<>"",D2<>""),B2*D2,IF(AND(B2="",D2=""),A2*C2,IF(D2="",B2*C2,A2*D2)))
它们将在性能上产生微不足道的差异,而没有什么差异。在遵循您的逻辑方面,BruceWayne的答案可能更具可读性,因此将来更容易维护或理解。上面的答案应该提供相同的结果,但长度要短几个字符。
作为一种可能在框外思考的古怪选择:
=CHOOSE(SUM((B2<>"")*2+(D2<>""))+1,A2*C2,A2*D2,B2*C2,B2*D2)
我手上有时间,所以我在搞怪TRUE和FALSE在通过数学运算发送时等于1和0的概念。当我开始查看选项时,这让我想起了二进制数是如何工作的。并不是我考虑得太多,但是我认为它有效,因为每个单元格的选项都是二进制或TRUE / FALSE。由于每种可能的组合都包含独特的结果,因此我只想提出一个可以产生独特结果的公式。在这种情况下,我只是采用了转换二进制数的方法。数学运算后,键为TRUE = 1,而FALSE =0。现在,另一个方向并不完全相同,但是正如吉普(Jeeped)所说的那样,0为FALSE,其他所有条件为TRUE。因此,如果将数字值用作逻辑检查的结果,则将3,-3和3.14都视为TRUE。
=IF(3.14,"THIS NUMBER IS TRUE","ONLY 0 IS FALSE")
如此少的侧面跟踪和返回点(不确定要扩展到多少!)。
查看上表,您会在黄色区域中注意到,列出了“空白”和“非空白”的所有可能组合。如果您随后以与二进制数字相同的方式为该列分配一个值(请注意A行),则可以开始生成所有可能的数字
我首先生成了E2:E5中需要的列表,以便选择可以使用的号码。我以为0会使选择失败,并导致失败。我知道FALSE+FALSE=0
,也知道TRUE+TRUE=2
和两个TRUE+FALSE=1 and FALSE+TRUE=1
。我需要一种方法来区分后两个,并且我知道总共需要4个结果。那就是在进行二进制计数/转换时,无论您要如何调用它。我将以下公式放在D2中并向下复制
=SUM((A2<>"")*2+(B2<>""))
Note the brackets around the logic check and
that the logic checks are sent through a math
operation before being summed.
technically speacking it is really:
=SUM((A2<>"")*2+(B2<>"")*1)
however the *1 is not needed
一旦我生成了该列表,它就是添加一个简单的+1进入E2:E5中看到的1到4范围。
现在,我有了一种生成索引号的方法,剩下要做的就是将所需的结果/公式与正确的组合进行匹配。
=CHOOSE(SUM((A2<>"")*2+(B2<>""))+1,"A","B","C","D")
好吧,我觉得自己在那儿击败了一匹死马,所以如果我过度解释,我会道歉。如果仍然缺少某些物品,请要求更多的爆炸物。
如果要检查的列更多,则可以通过简单地将下一个二进制值添加到该列并确保选择列表中有适当数量的结果来调整选择公式。应该有2 ^(要检查的列数)选项
=CHOOSE(SUM((A2<>"")*4+(A2<>"")*2+(B2<>""))+1,"A","B","C","D","E","F","G","H")
为简洁起见,击败了多个嵌套IF,但我认为嵌套IF更容易理解。
答案 1 :(得分:1)
您应该使用AND()
:
=IF(AND(B2<>"",D2<>""),B2*D2,IF(AND(B2<>"",D2=""),B2*C2,IF(AND(B2="",D2<>""),A2*D2,A2*C2)))
答案 2 :(得分:0)
您似乎正在混用其他编程语言中的运算符:
在Excel中:
AND : binary operator : AND(TRUE, FALSE) => FALSE
& : concatenation : "Hello " & "World" => "Hello World"