【问题标题】:INDEX/MATCH only finds the first value in a column with multiple entriesINDEX/MATCH 仅查找具有多个条目的列中的第一个值
【发布时间】:2016-04-29 15:01:44
【问题描述】:

A列有一个需要与B列匹配的值列表。如果匹配,则应返回C列中的相邻值。我正在使用 INDEX/MATCH 来执行此操作。但是,如果 A 列有一个重复的值,则 INDEX/MATCH 函数会返回 B 列中的第一个值,而不是 B 列中正在查找的第二个或第三个值。是否可以找到其他值(除了第一个)在 B 列中使用 INDEX/MATCH 函数?

这是示例表:

    Column A            Column B            Column C
    lookup0x16e663000   lookup0x16e663000   1461178793193312
    lookup0x16e663001   lookup0x16e663000   1461178793193508
    lookup0x16e663000   lookup0x16e663001   1461178793193704
    lookup0x16e663001   lookup0x16e663001   1461178793193891
    lookup0x16e663000   lookup0x16e663005   1461178793194110
    lookup0x16e663005   lookup0x16e663005   1461178793194312
    lookup0x16e663005   lookup0x16e663000   1461178793194538
    lookup0x16e663000   lookup0x16e663000   1461178793194760

所以在这里,如果我从 A 列中查找第 4 个值,它与 B 列的第 3 个值匹配,而不是第 4 个。

【问题讨论】:

  • 不使用 INDEX/MATCH,您需要合并 LARGE 或 AGGREGATE 来代替 MATCH 以返回正确的行号。如果您发布一些示例数据和预期结果,我们可能会提供进一步的帮助。
  • @ScottCraner 我对我的问题进行了编辑并在此处添加了表格。我们如何使用 Large 或 Aggregate 函数?我以前从未使用过它。这是我现在正在使用的。 =INDEX($C:$C, MATCH(A2,B:B,0))

标签: vba excel excel-formula


【解决方案1】:

您可以使用 AGGREGATE() 函数代替 MATCH:

=INDEX($C$1:$C$8,AGGREGATE(15,6,ROW($A$1:$A$8)/($A$1:$A$8=B1),COUNTIF($B$1:$B1,B1)))

AGGREGATE(15,6,...) 模拟 SMALL(IF()) 函数。 ROW($A$1:$A$8)/($A$1:$A$8=B1) 创建一个行号数组,其中 B1 = $A$1:$A$8。

COUNTIF($B$1:$B1,B1) 将告诉 AGGREGATE() 函数返回哪个行号数组。当它被向下拖动时,计数将从 1 变为 2 到 3,依此类推。

根据您的评论,此公式是动态的,可将参考数据限制在 A 列的范围内。

INDEX(C:C,MATCH("ZZZ",A:A)) 返回 C 列中 A 列中有数据的最后一行

把这个放到D2里,复制下来。

=INDEX($C$1:INDEX(C:C,MATCH("ZZZ",A:A)),AGGREGATE(15,6,ROW($A$1:INDEX(A:A,MATCH("ZZZ",A:A)))/($A$1:INDEX(A:A,MATCH("ZZZ",A:A))=B2),COUNTIF($B$1:$B2,B2)))

编辑 2

我的专栏显然被颠倒了。

把这个放到D2里,复制下来。

=INDEX($C$1:INDEX(C:C,MATCH("ZZZ",A:A)),AGGREGATE(15,6,ROW($B$1:INDEX(B:B,MATCH("ZZZ",A:A)))/($B$1:INDEX(B:B,MATCH("ZZZ",A:A))=A2),COUNTIF($A$1:$A2,A2)))

【讨论】:

  • 使用您提到的公式时出现 #NUM 错误。不知道我做错了什么。我在表中有更多数据。因此,我无法定义列的结尾。这是我正在使用的: =INDEX($C:$C, AGGREGATE(15,6,ROW($A:$A)/($A:$A=B2),COUNTIF($B:$B,B2 )))
  • 首先不要使用全列引用,数组公式按指数计算,你会扼杀excel。问题是如果计数。对于第 2 行COUNTIF($B$2:$B2,B2),它必须与此完全相同。注意什么是相对的,什么不是相对的。它只会计算高于它的那些。给我一秒钟,我将修改公式以动态查找数据的最后一行。 @harry71152
  • @harry71152 见编辑。请记住,当我们完成这项工作时,通过单击答案旁边的复选标记将其标记为正确。
  • 这部分工作。它返回值,但它们不是按顺序排列的。即使您查看您发布的表格,前 4 个值是正确的,但接下来的 3 个值是错误的。编辑后的公式也会发生同样的情况,它给出了值,但它们的顺序不正确
  • 像魅力一样工作!!!你摇滚!!!我已经尝试过很多次投票,但我想我还没有足够的声誉来放弃投票!!但是,你做了一个了不起的工作!感谢您的帮助!!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
  • 1970-01-01
相关资源
最近更新 更多