在这个例子中,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))

让我们分解成两部分:

  • 首先,我们检查A2A2之间的单元格,所以只有一个单元格,我们检查等于A2的单元格的数量。 在这种情况下,输出应该是1,比较A2A2 。 但是,您不限于将A2A2进行比较。 如果您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)。

我希望这对你有意义,因为我希望我的解释没有犯任何错误。