基于过滤标准的前n个值的总和

时间:2017-03-26 12:55:47

标签: excel excel-vba vba

我有以下顺序的数据集:

NIC代码|公司名称|年份| Real NS

在由NIC代码表示的列(A)中,我有大约70个唯一数字代表NIC代码,而相应地,我在列(B)中有公司名称,年份在列(C) )和(D)栏中的Real NS。

1990-2013;独特公司数量 - 10500

我希望真实NS的最高四个值的总和对应于唯一的NIC和年份。

还需要注意的是,对于每个唯一的NIC代码和年份,可能没有4个条目,在这种情况下,我希望得到与NIC代码和特定年份相对应的所有值的总和。

现在,对于从E2列到E71的输出,我列出了唯一的NIC代码,从K1开始,我把这些年份放到了AC1。在这个空间里,我想要前4个值的总和。

我最初使用过这段代码

=sumproduct(Large(A:A=E2)*(C:C=$k$1)*(D:D),{1,2,3,4})

在单元格K2中,但它没有用完。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

你的版本几乎可以正常工作,只需要正确的语法,试试这个

=SUMPRODUCT(LARGE((A:A=$E2)*(C:C=K$1)*(D:D),{1,2,3,4}))

...虽然最好将范围限制为特定的行数,否则如果您有多次迭代,公式可能会很慢。

以上不会处理前四位的负值,如果D列中的任何地方都有文字也不会起作用。此版本将处理负值并允许D列中的文字

=SUM(IFERROR(LARGE(IF((A:A=$E2)*(C:C=K$1),D:D),{1,2,3,4}),0))

需要使用CTRL + SHIFT + ENTER进行“数组输入”,以便在公式栏中的公式周围显示花括号。

同样,最好限制范围而不是使用整列