在这个例子中,SUMPRODUCT命令是如何工作的?
以下代码允许我在Excel中的数据透视表中确定不同的值:
=SUMPRODUCT(($A$A:$A2=A2)*($B$2:$B2=B2))
另请参阅: 用于统计唯一值的简单数据透视表
代码运行得很好。 但是,有人可以帮我理解这段代码是如何工作的吗?
你写道:下面的代码允许我确定在Excel数据透视表中不同的值
不。那个公式本身并不是那样做的。 请阅读关于什么的解释。
公式中有一个错字。 它应该是
=SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))
看到不同?
该公式从第2行开始,并被复制下来。 在每行中,$ A $ 2引用和$ B $ 2引用将保持不变。 $符号使他们绝对的参考。 相对引用$ A2和A2将在复制时改变它们的行号,所以在第3行中,A2将变成A3,B2将变成B3。 在下一行中将是A4和B4,依此类推。
您可能想要创build一个样例场景,其数据与您链接到的线程中的数据类似。 然后使用“公式”function区上的“评估公式”工具逐步查看计算结果。 公式从内到外评估。 我们假设公式已被复制到第5行,现在我们正在查看
=SUMPRODUCT(($A$2:$A5=A5)*($B$2:$B5=B5))
($A$2:$A5=A5)
这个位将A2到A5中的所有单元格与A5中的值进行比较。 结果是一个包含四个值的数组,包括true或false。 下一位($B$2:$B5=B5)
也返回一个真或假的数组。
这两个数组相乘,结果是一个1或0值的数组。 每个数组都有相同数量的值。
第一个数组的第一个值将与第二个数组的第一个值相乘。 (见红色箭头)
第一个数组的第二个值将与第二个数组的第二个值相乘。 (见蓝色箭头)
等等。
True * True将返回1,其他所有将返回0.乘法的结果是:
SumProduct函数的本质是对乘法(乘积)的结果进行求和,所以这就是它的作用。
这个函数本身并没有做任何事情来在Excel中build立不同的值。 在您链接的线程中,Sumproduct被包装在一个IF语句中,并且这是识别不同值的地方。
=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)
简而言之:如果当前行的列A和当前行的列B的值的组合已经出现在上面,则返回零,否则返回1。
这标记了组合列A和B的不同值。
Firts,我认为你在这里做了一个types,作为公式应该是:
=SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))
让我们分解成两部分:
- 首先,我们检查
A2
和A2
之间的单元格,所以只有一个单元格,我们检查等于A2
的单元格的数量。 在这种情况下,输出应该是1,比较A2
和A2
。 但是,您不限于将A2
与A2
进行比较。 如果您select了2个单元格等于A2
,则结果将为2.您可以使用A2比较任意多个单元格(replace$之后的字符进行调制)。 我们对第二个括号也是这样做的,除了枢轴值是B2
。 - 之后,您需要了解SUMPRODUCT的function。 它总结了产品的数值范围。 例如,假设你在
A1
上有值1,在A2
上有1,在B1
上有2,在B2
上有3,如果你做了SUMPRODUCT((A1:A2)*(B1:B2))
,你将得到(1*2) + (1*3) = 5
。 所以,在你给我们的例子中,它将给出(A2=A2)*(B2=B2) = 1
。
因此,它将输出等于(A2,B2)的对(Ax,Bx)的数量。 通过链接,你可以看到,如果你只select第一行,函数将输出1(所以IF
将输出1),但是如果你select前两行,函数将输出2, IF
将输出0)。
我希望这对你有意义,因为我希望我的解释没有犯任何错误。