excel:索引匹配 - 按费用列出前10个职位?

时间:2016-04-29 09:51:42

标签: excel indexing match

我在电子表格中的sheet1上有一个客户列表,如下所示:

Date           Entity      Sector        Client         Spend
April 2016     Group1      Aerospace     Client A       £2,000,000.00
April 2016     Group1      Aerospace     Client B       £5,000,000.00
April 2016     Group2      Rail          Client C       £13,000.00
April 2016     Group1      Aerospace     Client D       £45,000.00
April 2016     Group1      Telecoms      Client E       £20,000.00

我想了解一下我们花费的十大客户名单。

我有一些我需要设定的参数/标准,即

客户必须拥有' Group1'实体,必须属于航空航天公司扇区。

在Cell A10中我放置了我的扇区= Aerosapce 在单元格C6中,我分配了我的组= Group1

到目前为止,我正在使用此数组公式并将其向下拖动10行,以产生10个独特的结果。

=IFERROR(INDEX('Opp Data'!$H2:$H5000,MATCH(1,('Opp Data'!$G$2:$G$5000&'Opp Data'!$F$2:$F$5000=$A$10&$C$6)*('Opp Data'!$K$2:$K$5000=LARGE(IF('Opp Data'!$G$2:$G$5000&'Opp Data'!$F$2:$F$5000=$A$10&$C$6,'Opp Data'!$K$2:$K$5000),ROW(1:1))*(COUNTIF($C$13:$C13,'Opp Data'!$H$2:$H$5000)=0)),0)),"")

这应该给我的客户按顺序从最大到最低,产生如此结果:

Client           Sector         Spend

Client B    
Client A
Client D 
etc
etc.

在客户名称旁边,我想列出客户所属的相关部门,即" Aerospace"并在旁边的专栏中花费。

我这样做是通过使用索引匹配:

=IFERROR(INDEX('Opp Data'!$C:$C, MATCH(A2,'Opp Data'!$D:$D, 0)),"")

目前数据遍布整个地方且支出与客户名称不对应,并且显示的某些客户端不在第1组或航空航天中。

我得到了这个:

Client           Sector            Spend

Client B         Rail              £20,000.00
Client A         Aerospace         £13,000.00
Client D         Telecoms          £2,000,000.00
etc
etc.

但我应该得到这个:

Client           Sector            Spend

Client B         Aerospace         £5,000,000.00
Client A         Aerospace         £2,000,000.00
Client D         Aerospace         £45,000.00
etc
etc.

请有人告诉我我哪里出错了,如果有更好的方法可以告诉我吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

要获得您的表,最好的方法是带过滤器的数据透视表。这样你就可以做你想做的事。

除此之外你想要公式:

首先获得最高支出。为此,我们需要使用LARGE()或AGGREGATE()函数:

=IFERROR(AGGREGATE(14,6,$E$2:$E$6/(($C$2:$C$6=$G$2)*($B$2:$B$6=$H$2)),ROW(1:1)),"")

将其放入“花费”列的第一个单元格中并向下拖动。行(1:1)充当计数器,随着它被拖拽而增加。这样它就找到了第一个,然后是第二个,依此类推。

/下方的部分规定只有符合条件的部分才会被使用。我将Aerospace放在G2中,将Group1放在H2中。

然后我们可以在INDEX的一侧使用另一个AGGREGATE()函数来获取另外两列的其他数据:

行业:

=IF(L2<>"",INDEX($C$2:$C$6,AGGREGATE(15,6,(ROW($C$2:$C$6)-1)/(($E$2:$E$6=L2)*($B$2:$B$6=$H$2)),COUNTIF($L$2:$L2,L2))),"")

或者,既然我们已经在单元格中有了所需的扇区,我们可以简单地说:

=IF(L2<>"",$G$2,"")

客户端:

=IF(L2<>"",INDEX($D$2:$D$6,AGGREGATE(15,6,(ROW($D$2:$D$6)-1)/(($E$2:$E$6=L2)*($B$2:$B$6=$H$2)),COUNTIF($L$2:$L2,L2))),"")

我们再次使用AGGREGATE代替MATCH,以防与Spend中的金额有关系。 COUNTIF()允许我们获取那些重复项,其中Match将仅为两者返回第一个。

在编辑公式的范围以匹配您的范围时,请注意以下部分:(ROW($D$2:$D$6)-1)这也是一个将整数返回INDEX()函数的计数器。我们需要从1开始。因此,如果您的数据在第3行开始,我们需要将1更改为2。它应该比起始行少1个。

enter image description here

与数据透视表一起,查看高级过滤器和VBA。请参阅HERE,了解它们如何帮助解决您的问题。