我尝试根据几个特定条件总结所有条目。
目标是统计单元格 J 或 K 或 L 或 M 中勾选“是”且单元格 H 中勾选“第一”的所有条目
这是我目前使用的公式:
=SUMPRODUCT((('J2:J100="yes") + (K2:K100="yes") + (L2:L100="yes") + (M2:M100="yes")) * (H2:H100="1st"))
这几乎可行。
问题是,如果他在 4 个单元格(J、K、L、M)中的任何一个单元格中都回答了“是”,我只想计算一次记录,而不是多次。例如,如果一条记录在单元格 K 和 L 中都标记为“是”,并且在 H 中为 1,则将计算两次而不是一次。
这是因为 SUMPRODUCT 函数的计算结果为 0 + 1 + 1 + 0 * 1,即 = 2
我在想,如果有办法将我编写的函数的第一部分转换为布尔值,以便任何正值都被视为 1,任何负值都被视为 False,这可以解决我的问题。
答案1
添加>0
=SUMPRODUCT((('J2:J100="yes") + (K2:K100="yes") + (L2:L100="yes") + (M2:M100="yes")>0) * (H2:H100="1st"))
现在
(0 + 1 + 1 + 0 > 0) * 1
会变成
1 * 1
即1
答案2
>0
显然会运行良好并且可能比函数运行得更快。
这个想法到底是什么可能对你(两年后)或其他将来可能维护电子表格的人来说都不太明显。
Excel 有一个函数OR()
,可以很好地解决这种情况。它不再进行四次单独的比较,产生 1/0、相加、比较等,而是简单地进行四次比较,并产生一个 1 或 0 作为输出,这一点现在和将来任何人都清楚。
嗯,不是直接的:它会产生 TRUE 或 FALSE,但将其乘以 H 列项会将其结果强制转换为 1 或 0,并使乘法成功。(当您看到人们使用--
或*1
方法来强制实现相同的效果时,就会发生这种情况。但任何乘法都可以解决问题,而不仅仅是那些,所以它们不是必需的。
但是人们确实喜欢(0+1+1+0)路线,这对他们来说不是问题,但如果您想要一种简单的其他方法,那就OR()
可以满足要求。