嵌套在excel中进行计算

问题描述 投票:0回答:3

我将第一列作为计算列,这就是我目前所写的内容。这没有给我什么。

=IF(B2<>""&D2<>"",B2*D2,IF(B2<>""&D2=""&C2<>"",B2*C2,IF(A2<>""&C2<>""&AND(B2&D2=""),A2*C2,IF(A2<>""&C2=""&D2<>""&B2="",A2*D2,A2*C2))))

逻辑是如果B2和D2不是空乘以b2 * d2

如果B2不为空且D2为null,则为b2 * c2

如果B2为null且D2不为null,则a2 * d2

否则a2 * c2

是否有任何方法可以使此代码工作?

谢谢

excel if-statement excel-formula nested
3个回答
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)

Expanding (not just my waist size)

我有时间在我的手上所以当我通过数学运算发送时,我正在使用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")

所以更少的侧面跟踪和重点(不确定我需要扩展到多少!)。

Example Table

查看上表,您将在黄色区域中注明,列出了BLANK和NOT BLANK的所有可能组合。如果然后以与二进制数相同的方式为列分配值(注意行A),则可以开始生成所有可能的数字

我开始生成E2中需要的列表:E5用于CHOOSE可以使用的数字。我假设0会击败CHOOSE并导致失败。我知道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中看到的1到4范围:E5。

既然我有一种生成索引号的方法,那么剩下要做的就是将所需的结果/公式与正确的组合相匹配。

=CHOOSE(SUM((A2<>"")*2+(B2<>""))+1,"A","B","C","D")

好吧,我觉得我在那里打了一匹死马,所以如果我解释过,我的道歉。如果仍然缺少某些东西需要更多的探索。

UPDATE TID BIT

如果有更多列要检查,可以通过简单地将下一个二进制值添加到列并确保选择列表中有适当数量的结果来调整选择公式。应该有2 ^(要检查的列数)选项

=CHOOSE(SUM((A2<>"")*4+(A2<>"")*2+(B2<>""))+1,"A","B","C","D","E","F","G","H")

为简洁起见,哪种打败多个嵌套的IF,但我认为我发现嵌套的IF更容易理解。


1
投票

你应该使用AND()

=IF(AND(B2<>"",D2<>""),B2*D2,IF(AND(B2<>"",D2=""),B2*C2,IF(AND(B2="",D2<>""),A2*D2,A2*C2)))

0
投票

您似乎混合了其他编程语言的运算符: 在Excel中:

AND : binary operator : AND(TRUE, FALSE) => FALSE
&   : concatenation   : "Hello " & "World" => "Hello World"
© www.soinside.com 2019 - 2024. All rights reserved.