[英]How to find table cell value based on condition provided in column and row?
[英]Find the cell matching a condition in a table
我想找到一个公式解决方案,它采用 2 个参数:一个表格和一个文本,并将表格中包含该文本的单元格返回为 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ。
例如,
im
,我希望公式返回 Cell B2,其值为Jim
。omas
,我希望公式返回 Cell C5,其值为Thomas
。我们可以假设表格中只有一个单元格满足这个条件。 对于任何想要进一步 go 的人,当表格中有多个符合条件的单元格时,我们可以尝试返回左上角的一个。
理想情况下,
:
将它与另一个单元格组合以构建一个范围,例如...:F10
。有谁知道如何实现这一目标?
根据条件和输入表使用 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.