索引/匹配IF语句

在这里输入图像说明

正如你所看到的,我在左边有一个数据库表。 而且我想添加IF语句,只允许我查找A公司前5名的[代码],[名称]和[金额]。 然后做B公司的前5名等等。 我已经设法查找所有公司的前5名,但似乎无法添加一个标准来针对特定的公司。

以下是我的公式:

公式列K [公司]:= INDEX(Database,MATCH(N3,sales,0),1)

公式列L [代码]:= INDEX(Database,MATCH(N3,sales,0),2)

公式列M [名称]:= INDEX(Database,MATCH(N3,sales,0),2)

公式第N列[金额]:=大LARGE(sales,ROW(1:20))

预期的结果是显示每个公司中前5名的销售人员以及他们的[代码],[姓名]和[金额],随意build议对工作表进行编辑。

如果您知道该代码是唯一的,则可以使用其他方法。 把A放入K3:K7后

首先从N3开始获得A公司的最高金额

 =AGGREGATE(14,6,Database[Amount]/(Database[Company]=K3),ROWS(N$1:N1)) 

然后find与数量相匹配的代码,但只有在以前没有使用过的代码(假定代码是唯一的)从L3开始

 =INDEX(Database[Code],MATCH(1,INDEX((Database[Company]="A")*(Database[Amount]=N3)*ISNA(MATCH(Database[Code],L$2:L2,0)),0),0)) 

然后从M3开始find与正常INDEX / MATCH匹配的名称

 =INDEX(Database[Name],MATCH(L3,Database[Code],0)) 

在这里输入图像说明

好的,我已经实现了这一点,使用一个你可以隐藏的帮手列。 请注意,只有在任何1家公司的总数不超过9个的情况下,这个function才会起作用,我认为您不应该遇到这个问题,但是可能会发生这样的情况,帮手列添加的数字将需要被调整

在这里输入图像说明

第一帮手列:

在总数的末尾添加一个数字,表示该公司上面已经存在金额的次数。 这个公式是=CONCATENATE([@Amount],COUNTIFS($A$1:A1,A2,$D$1:D1,D2))*1

这是乘以1以保持LARGE的数字格式。

第二帮手专栏:

这是一个数组公式,并且需要在仍然在公式栏中使用Ctrl + Shift + Enter进行input

这个公式为: =LARGE(IF(Company="A",Helper),ROW(1:1))

该公式作为数组公式所产生的结果列表是基于LARGE可以使用的IF语句。 现在我们可以选出具有公司“A”的行,而不是将整个列从最大到最小排列:

=LARGE({20000;20001;20002;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;15000;14000;30000;FALSE;FALSE;FALSE;FALSE},ROW(1:1))

LARGE只能使用数字值,所以在列A不匹配“A”的情况下产生的FALSES将被忽略。 注意为什么我在这里使用帮手列来消除唯一的值,但不影响前5名。

ROW(1:1)已被使用,因为这将自动更新公式被拖下来产生在这个数组中的下一个最高的结果。

前5arrays的主要公式

再次,这是一个数组公式,所以需要通过使用Ctrl + Shift + Enter仍然在公式栏中input

=INDEX(Database,SMALL(IF(Company="A",IF(Helper=$O3,ROW(Company))),1)-1,COLUMN(A:A))

由于某些未知原因,数组公式IF(AND())不适用于我,所以我嵌套了两个IF

请注意,我再次检查第一列是否匹配“A”,然后检查最后一列是否与第二个公式的结果匹配。 会发生什么情况是这两个条件在数组中匹配(因为在同一行中都产生TRUE)我想要返回行号。

IF({TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;FALSE},IF({FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE;FALSE;TRUE;FALSE;FALSE},{2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20}))

它看起来像我知道的一个混乱,但是这两个TRUEalignment的位置给了我们行16作为结果。

{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;16;FALSE;FALSE;FALSE;FALSE}

据我所知,只有一个匹配可能为此,我使用SMALL来获取第一个最小的数字在INDEX公式中用于行和扣除1,因为我们不考虑INDEX公式中的标题,所以我们实际上希望第十五个结果。

同样, COLUMN(A:A)已被用于列号的返回,因为当公式被拖动时这将自动更新。

如果您正在为我的解释而苦苦挣扎,并希望我提供更清晰的内容,请随时与我联系,我将尽我所能详细解释这一逻辑