索引/匹配多个可能的答案?

时间:2015-08-05 22:49:51

标签: excel excel-formula

关于如何在Excel COUNTIFS for VLOOKUP中返回一些信息的问题。来自@THATNewbie。

以下是一个快速摘要:

他们有这张桌子:

Report Name        User Name      Report Category
Report 1           John Smith     Sales
Report 1           Jack Black     Sales
Report 1           Connie Rae     Sales
Report 1           Brain Bonds    Sales
Report 2           John Smith     Sales
Report 2           Connie Rae     Sales
Report 3           Jack Black     Inventory

他们希望根据用户名和报告类别返回“报告名称”。

我的第一个想法只是使用索引/匹配(作为数组)...但是,我意识到,如果我使用“John Smith”和“Sales”查找报告名称,则有两种可能的结果:{ {1}}和Report 1。索引/匹配将始终返回Report 2(或者首先返回该列,然后返回该列)。

我的问题是:有没有办法编写索引/匹配公式来检查它是否已找到Report1并因此转到下一个匹配项(Report1)?

这是帮助可视化的screenshot。如您所见,索引/匹配在C12中正确找到Report2,但也在C13中找到。你有没有“看上面”的公式,如果它是它将返回的答案,跳过它并寻找下一个?这有意义吗?

3 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

=INDEX(Report_Name,MATCH(The_User&":"&The_Category,User_Name&":"&Report_Category,0))

我们的想法是将用户名和报告类别连接到一个搜索项中。 (我添加了冒号作为分隔符;这是可选的,可以省略。)然后使用MATCH获取匹配项的索引,使用INDEX将索引转换为特定报告。

希望有所帮助。

答案 1 :(得分:0)

不幸的是(据我所知)没有办法做到这一点。您必须为每一行添加某种唯一标识符,或者有助于唯一地定义它的值。例如,您可以使用此函数添加新列

=COUNTIFS($B$2:$B2, "=" & $B2, $C$2:$C2, "=" & $C2)

这将做的是计算特定分组显示的总次数,并有效地充当它的伪ID。然后,您可以将该项添加到索引/匹配

然后在你在图像中显示的第二个表中,你只需在匹配中重复计数功能,这样就可以了

=INDEX($A$2:$A$8, MATCH(1, (A12 = $B$2:$B$8) * (B12 = $C$2:$C$8) * (COUNTIFS($A$12:$A12, "=" & $A2, $B$2:$B2, "=" & $B2) = $D$2:$D8), 0))

这是一个输入forumla的数组

答案 2 :(得分:0)

我的问题是:有没有办法将Index / Match公式写成 检查是否已经找到Report1,因此转到下一个 匹配(Report2)?

是的,但是更简单的方法是使用index&small。

索引和小

需要按CTRL + SHIFT + ENTER。向下复制剩余的行。

{=INDEX($A$2:$A$16,SMALL(IF(A19=$B$2:$B$16,IF(B19=$C$2:$C$16,ROW($B$2:$B$16)-ROW($B$2)+1),""),ROW(B2)-1))}

A19和B19包含用于搜索条件的单元格。


使用索引和匹配;

这可以简化,但显示了步骤。

在搜索条件区域旁边添加另一列,并按如下所示更改公式。

需要按CTRL + SHIFT + ENTER。

C列(报告名称);

仅跟随第一行或搜索条件项

{=INDEX($A$1:$A$16,MATCH(A21&B21,$B$2:$B$16&$C$2:$C$16,0)+ROW(A2)-1)} 

复制以下所有行项。

{=INDEX($A$1:$A$16,MATCH(A22&B22,INDIRECT(CONCATENATE("B",E22,":","B16"))&INDIRECT(CONCATENATE("C",E22,":","C16")),0)+ROW(INDIRECT(CONCATENATE("B",E22)))-1,1)}

列E-帮助列。助手列返回下一行的开始。

第一行项目为N / A。

仅跟随第二或搜索条件项。

{=MATCH(A22&B22,$B$2:$B$16&$C$2:$C$16,0)+ROW(A2)}

在复制其余行之后。

{=MATCH(A23&B23,INDIRECT(CONCATENATE("B",E22,":","B16"))&INDIRECT(CONCATENATE("C",E22,":","C16")),0)+ROW(INDIRECT(CONCATENATE("F",E22)))}


但是,这确实假定搜索条件相同,这与所提到的其他问题不同。如果搜索条件不同或更复杂,请参阅 COUNTIFS for VLOOKUP