繁体   English   中英

在表格中查找与条件匹配的单元格

[英]Find the cell matching a condition in a table

我想找到一个公式解决方案,它采用 2 个参数:一个表格和一个文本,并将表格中包含该文本的单元格返回为 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ。

例如,

  • 给定下表 B2:D5 和文本im ,我希望公式返回 Cell B2,其值为Jim
  • 给定表 B2:D5 和文本omas ,我希望公式返回 Cell C5,其值为Thomas

我们可以假设表格中只有一个单元格满足这个条件。 对于任何想要进一步 go 的人,当表格中有多个符合条件的单元格时,我们可以尝试返回左上角的一个。

理想情况下,

  • 该公式返回一个单元格而不是单元格值。 通过一个单元格,我的意思是我们甚至可以通过:将它与另一个单元格组合以构建一个范围,例如...:F10
  • 我更喜欢没有 LAMBDA function 的解决方案,它仍在预览中。

有谁知道如何实现这一目标?

在此处输入图像描述

根据条件和输入表使用 SEARCH 生成匹配矩阵。 找到匹配的第一列,以及该列中匹配的第一行,然后将这些数字传递给 INDEX。 使用 LET 使其更易于阅读:

=LET(
  t, R1C1:R5C3,
  cond, "*" & RC5 & "*",
  matches, IFERROR(SEARCH(cond, t), 9999),
  col, MIN(matches*COLUMN(t)),
  rw, MIN(INDEX(matches*ROW(t), FALSE, col)),
  INDEX(t, rw, col)
)

由于单元格引用会自动计算单元格的值,因此我在第 7 列中放置了第二个公式来转储引用字符串。

在此处输入图像描述

定义: t 是输入表。 匹配是匹配的数组。 它可能是 1 或错误,所以我用 IFERROR 换行,因为我稍后会得到 MIN,所以我使用一个任意高的数字,以便我的数组是 1 或 9999。col 使用 MIN 来查找最低匹配列,然后我使用 INDEX 从输入表 (t) 返回该列并获取最小行。 将这些数字结合起来,我可以得到一个可以在 INDIRECT 中使用的字符串。

请注意,您可以将此公式与:链接以生成范围:

在此处输入图像描述

=INDEX(A:D,SUMPRODUCT(ISNUMBER(SEARCH("?"&"im",B2:D5))*(ROW(B2:D5))),SUMPRODUCT(ISNUMBER(SEARCH("?"&"im",B2:D5))*(COLUMN(B2:D5))))

使用时要小心,因为多次匹配会返回错误或错误结果!

您也可以考虑不在两个搜索前使用"?"& ,但这将包括以搜索值开头的匹配项。

两种可能:

a)如果您正在寻找显示所有匹配项的解决方案,您可以使用这个美丽的公式:)

=IFERROR(INDEX($A$1:$D$5,
    AGGREGATE(15,6,ROW($A$1:$A$5)/(SEARCH($G$1,$A$1:$D$5)>0),ROW(A1)),
    AGGREGATE(15,6,COLUMN($A$1:$D$1)/((SEQUENCE(ROWS($A$1:$A$5),COLUMNS($A$1:$D$1),1,1)/AGGREGATE(15,6,(SEQUENCE(ROWS($A$1:$A$5),COLUMNS($A$1:$D$1),1,1)*(SEARCH($G$1,$A$1:$D$5)>0)),ROW(A1)))=1),1))
    ,"-")

在此处输入图像描述

您“只是”必须根据您的数据更改范围。 :)

b)如果您对第一场比赛没问题,那么您可以使用

=IFERROR(INDEX($A$1:$D$5,
    AGGREGATE(15,6,ROW($A$1:$A$5)/(SEARCH($G$1,$A$1:$D$5)>0),1),
    AGGREGATE(15,6,COLUMN($A$1:$D$5)/(SEARCH($G$1,$A$1:$D$5)>0),1)),
 "-")

如果有多个可能的匹配项,则不会失败。 如果你想知道有多少匹配,那么只需使用

=COUNTIF(A1:D5,"*"&G1&"*")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM