如您所见,我左侧有一个数据库表。我想添加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名销售人员及其[代码],[名称]和[金额],随时建议对工作表进行任何编辑。
答案 0 :(得分:1)
如果您知道代码是唯一的,那么这是另一种选择。将A放入K3:K7后
首先从N3开始获得A公司的最高金额
=AGGREGATE(14,6,Database[Amount]/(Database[Company]=K3),ROWS(N$1:N1))
然后找到与金额相匹配的代码,但只有在之前没有使用它(这假设代码是唯一的)从L3开始
=INDEX(Database[Code],MATCH(1,INDEX((Database[Company]="A")*(Database[Amount]=N3)*ISNA(MATCH(Database[Code],L$2:L2,0)),0),0))
然后从M3
开始,找到具有正常INDEX / MATCH的匹配名称=INDEX(Database[Name],MATCH(L3,Database[Code],0))
答案 1 :(得分:0)
好的,我已经通过使用你可以隐藏的辅助列实现了这一点。请注意,只有在任何一家公司的总数不超过9个时,这才会有效,我不认为你应该有这个问题,但可能会发生,辅助列添加的数字会需要调整
First Helper Column:
在总数的末尾添加一个数字,表示该公司上面已存在的金额的次数。此公式为=CONCATENATE([@Amount],COUNTIFS($A$1:A1,A2,$D$1:D1,D2))*1
将此值乘以1以保持LARGE
的数字格式。
第二助手专栏:
这是一个数组公式,需要在公式栏中使用 Ctrl + Shift + Enter 输入。
这个的公式是:
=LARGE(IF(Company="A",Helper),ROW(1:1))
此公式作为数组公式的作用是根据IF
可以使用的LARGE
语句生成结果列表。我们现在可以挑出具有公司" 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
仅适用于数值,因此FALSES在A列不匹配时生成" A"将被忽略。请注意为什么我在这里使用了辅助列来消除唯一值但不影响前5个。
ROW(1:1)
已被使用,因为当拖动公式以在此数组中产生下一个最高结果时,它会自动更新。
前五大阵列的主要公式
同样这是一个数组公式,因此需要在公式栏中使用 Ctrl + Shift + Enter 输入。
=INDEX(Database,SMALL(IF(Company="A",IF(Helper=$O3,ROW(Company))),1)-1,COLUMN(A:A))
对于某些未知原因IF(AND())
的数组公式,对我来说不起作用,所以我已经嵌套了两个IF
&#39。
注意我是如何再次检查第一列是否匹配" 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}))
我知道它看起来像一团糟,但两个TRUE对齐的位置给我们排第16行。
{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;16;FALSE;FALSE;FALSE;FALSE}
据我所知,这可能只有一个匹配,我使用SMALL
来获取要用于行的INDEX
公式中的第一个最小数字,并扣除1,因为我们没有考虑INDEX公式中的标题,所以我们实际上想要第15个结果。
同样,COLUMN(A:A)
已被用于返回列号,因为当拖动公式时它会自动更新。
如果您正在努力解释我的想法并希望我提供更多清晰度,请随时与我联系,我会尽力更详细地解释逻辑