【问题标题】:Find a value in a range (any of multiple column or rows) and return the value in far left most column of that row在一个范围(多列或多行中的任何一个)中查找一个值并返回该行最左边的列中的值
【发布时间】:2021-08-23 00:45:21
【问题描述】:

寻找类似于典型的索引匹配公式的东西,它可以向右看,向左返回值,但要查看一个范围内的所有列。以下面的有效公式为例。

(Excel 2021。)

在 D 列中查找 A1 的值,并从 C 列返回值。

=INDEX($C$1:$C$10,MATCH(A1,$D$1:$D$10,0))

在我的理想世界中,我可以保留 $D$1 并将 $D$10 更改为 $F$10,以便它搜索所有列 D/E/F,并且仍然返回 C,如下所示。但是,这在我们的现实世界中不起作用,请问还有其他想法吗?谢谢!

=INDEX($C$1:$C$10,MATCH(A1,$D$1:$F$10,0))

更新* 为了澄清有字母和数字的混合。此外,该表将有大约 50k 行,因此希望尽可能简单。

C 列也肯定是唯一的,D-F 应该是唯一的值,但有可能出现错误,并且可能会出现一些重复。

【问题讨论】:

  • 你想从每一行返回(最大)1个值,从D1到F10返回(最大)1个值,还是所有匹配的数组?
  • 如果 D1:F10 中的所有值都是不同的数字并且 C 列只有唯一的数字,我有一个简单的公式。 =SUMPRODUCT(($D$1:$D$10=A1) + ($E$1:$E$10=A1) + ($F$1:$F$10=A1), $C$1:$C$10)
  • @okzoomer 这会起作用,但如果 OP 在实际工作表中有更多列,那么他需要添加更多或条件。
  • 谢谢,但值并非全是数字,所以这不起作用。

标签: excel index-match


【解决方案1】:

您需要MMUL()INDEX()。如果您有Excel-365,请尝试以下公式。

=FILTER(C1:C10,MMULT(--(D1:F10=A1),SEQUENCE(COLUMNS(D1:F1))))

对于旧版本尝试

=INDEX($C$1:$C$10,LARGE(MMULT(--($D$1:$F$10=A1),TRANSPOSE({1,1,1}))*ROW($C$1:$C$10),1))

【讨论】:

  • 这成功了!您认为每天运行 50k 行(i5 处理器)是否可行?我想我会在这周晚些时候找到答案。非常感谢。
  • 不会发布 50K 行。
【解决方案2】:

由于您的 INDEX/MATCH 取自相同的行,您可以先简化原始搜索

=XLOOKUP(A1,$D$1:$D$10,$C$1:$C$10)

XLOOKUP 结合了HLOOKUPVLOOKUP,默认为完全匹配。

这将适用于搜索三行

IFERROR(IFERROR(XLOOKUP(A1,$D$1:$D$10,$C$1:$C$10), XLOOKUP(A1,$E$1:$E$10,$C$1:$C$10)), XLOOKUP(A1,$F$1:$F$10,$C$1:$C$10))

我们可以将列命名为colCcolDcolEcolF,它就变成了

IFERROR(IFERROR(XLOOKUP(A1,colD,colC), XLOOKUP(A1,colE,colC)), XLOOKUP(A1,colF,colC))

与其他查找一样,这将返回第一个值或 #N/A 错误。

如果我们被允许在某处添加一列,这可以为更多的行提供更多的可扩展性。

【讨论】:

  • 这确实有效,有 50k 行虽然我不确定哪个会运行更顺畅但会测试。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 2017-12-23
相关资源
最近更新 更多