索引匹配数组:索引范围和多个匹配

时间:2018-01-21 00:05:42

标签: excel excel-formula

我在选项卡组佣金的以下布局中有一个数据块(我也附上照片。)。在为代理商Paul命名的单独选项卡上,我尝试交叉引用单元格B11中的客户端名称和单元格B4中的代理名称以及组委员会的数据,以返回特定代理的佣金百分比。因此,如果在标签保罗我有"客户1"在B11和" Paul"在B4中,我希望能够返回" 12.5"。保罗并不总是在座席4中。任何座席都可以在特定客户的代理2,座席3或座席4中。

enter image description here

我有这个公式,但它不是我想要的,因为我不能对行号进行硬编码。

{=INDEX('Group Commissions'!G:I,MATCH('Paul'!B11,'Group Commissions'!A:A,0),MATCH(B4,'Group Commissions'!C143:E143,0))}

但是,使用一系列列会导致公式出错。正如我所提到的,我不能对行号进行硬编码,所以现在我被卡住了。这甚至可能吗?

{=INDEX('Group Commissions'!G:I,MATCH('Paul'!B11,'Group Commissions'!A:A,0),MATCH(B4,'Group Commissions'!C:E,0))}

1 个答案:

答案 0 :(得分:0)

=INDEX('Group Commissions'!G1:I5,MATCH(Paul!B11,'Group Commissions'!A1:A5,0),SMALL(IF(Paul!B4=IF('Group Commissions'!A1:A5=Paul!B11,'Group Commissions'!C1:E5),IF('Group Commissions'!A1:A5=Paul!B11,COLUMN('Group Commissions'!C1:E5)-COLUMN(C:C)+1)),1))

好的,这有点乱,但可以实现您的目标。

对于第二个参数(列号),我不得不使用嵌套的IF()语句来构建一个列号数组(至少是INDEX()子句的开头,使用列计算只是为了便于阅读,我通常会减去所需的数量。)

对于与客户端匹配的行以及行的正确值,我首先为所有单元格生成一个FALSE数组:

IF('Group Commissions'!A1:A5=Paul!B11,'Group Commissions'!C1:E5)

然后检查此数组是否有代理名称,并将其与我想要返回的列号相等(相同的公式,但返回列号减去索引偏移量):

IF(Paul!B4=[Previus part],IF('Group Commissions'!A1:A5=Paul!B11,COLUMN('Group Commissions'!C1:E5)-COLUMN(C:C)+1)

这包含在SMALL()中,因此我们可以返回最小的结果(将数字放在第一位),这样我们就可以得到列号作为结果。