【问题标题】:Index/Match with multiple possible answers?索引/匹配多个可能的答案?
【发布时间】:2015-08-05 22:49:51
【问题描述】:

有一个关于如何在 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”来查找报告名称,有两种可能的结果:@ 987654324@ 和Report 2。索引/匹配将始终返回 Report1(或任何先出现的,沿着该列向下)。

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

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

【问题讨论】:

  • 你能添加你当前的函数,总是给出第一个
  • 如果您愿意,我可以向您展示我用来解决此问题的步骤;但是,它不包括索引/匹配。
  • @rwilson - 我在另一个线程中看到了您的解决方案,谢谢!
  • 是的,由于表格的形状和所需的输出,这是一个令人讨厌的公式。不过,您在这里遇到的这个问题是一个更合理的问题,并且是我在构建数组公式时经常遇到的情况。

标签: excel excel-formula


【解决方案1】:

你可以试试这样的:

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

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

希望对您有所帮助。

【讨论】:

  • 嗯,当我两次查找“John Smith”和“Sales”时,它只显示Report1(如屏幕截图所示)。
  • 对不起,我误会了。您是要查找所有匹配项、最后一个匹配项、第一个匹配项还是其他内容?
  • 啊,如果我不清楚,对不起。我正在尝试找到所有匹配项。因此,在this screenshot 中,第一个条目(我正在显示其公式)返回“Report1”。我希望第二个显示“Report2”。 (不知何故知道“Report1”已经返回,所以要在表中查找下一个匹配项)。
  • 知道了。 Excel 的 TABLE 功能可以做到这一点。 (旧版本 Excel 中的列表)。 TABLEs 是一种过滤数据集的简单方法。如果您想要 INDEX/MATCH 的类似功能,您可以将 Index1 从第一个匹配项输出到单元格,然后使用 Index1 作为列表顶部的偏移量,以获得 MATCH 获取 Index2 的新起点,依此类推。看起来有点乱,但应该可以完成工作。
【解决方案2】:

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

=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))

这是一个输入论坛的数组

【讨论】:

    【解决方案3】:

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

    是的,但更简单的方法是使用 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 列 - 辅助列。辅助列返回下一行的开始。

    第一行项目不适用。

    仅关注第二个或搜索条件项。

    {=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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2021-06-13
      • 2017-01-08
      • 2021-11-16
      相关资源
      最近更新 更多