我正在尝试在文本字符串和单元格内以及单元格列表中的数字中查找关键字。
目前,只要输入的查找值(文本)位于其中一个文本字符串的第一个单词内,我的公式就会正确地从列表中提取正确的项目。
问题是,有时很难记住标题中第一个单词到底是什么,因此希望能够搜索整个文本字符串以找到匹配项。
我应用以下带有通配符的公式,如下所示
F3=VLOOKUP("*"&$E3&"*"&F$2,CHOOSE({1,2},$B$3:$B$19&$A$3:$A$19,$C$3:$C$19),2,0)
答案1
这个公式可行
=VLOOKUP($E3&F$2,CHOOSE({1,2},$B$3:$B$19&$A$3:$A$19,$C$3:$C$19),2,0)
但是,在您的示例中,E3 和 F2 会产生:钢力 LH 123
没有什么能比得上这一点
您需要在 E3 等之前使用 F2。
=VLOOKUP(F$2&$E3&"*",CHOOSE({1,2},$B$3:$B$19&$A$3:$A$19,$C$3:$C$19),2,0)
答案2
下面的方法同样有效:
=IFERROR(VLOOKUP("*"&$E3&"*",INDEX(FILTER($A$3:$C$19,$A$3:$A$19=F$2),SEQUENCE(5,1),{2,3}),2,FALSE),"")
将其粘贴到单元格 F3 中,然后复制单元格并粘贴到整个输出表中。
它用于FILTER()
查找ID column
输出表中所有与列标题(因此为“F$2”,而不是“$F$2”)匹配的记录(图片中的 A 列)。这是三列材料(它将是 Excel 内部使用的数组,因此它不需要比输出表中的单个单元格更多的空间),但不幸的是,由于排列方式VLOOKUP()
不同,列顺序被重新排列INDEX()
({2,3}
部分:可以包括所有三列,但只需要两列,因此内部数组会更小,因此速度更快,并且能够在公式计算中因超出材料容量而出错之前使用表中的更多行)。
INDEX()
会很乐意做 {3,1,2} 或 {3,2} 或... 好吧,任何安排,包括多次放入一列。只是“顺便”做其他工作。
因此,现在列的顺序正确了VLOOKUP()
,但是如何搜索可能在任何地方或任何地方的子字符串呢?使用*
通配符和包含子字符串的单元格。这就是"*"&E3&"*"
部分。它会在您使用的两列中进行查找,所需的值位于第二列,即使数据本身有三列。
最后,删除有错误的单元格,IFERROR()
会为它们提供“”条目。如果您想要包含错误的准确图片,只需从公式中删除该换行符即可。
请记住,如果您有 10,000 行此材料,而您查找的内容会产生 943 行,则只会找到第一个实例。但您似乎对此没有异议,因为没有提到这一点,所以我并不担心。
这使用了SEQUENCE()
2017 年还不存在的技术。有一种生成此类序列的较老的技术,可在任何 Excel 帮助站点上轻松找到。
此外,如果感兴趣的话,可以复制FILTER()
公式的一部分,用函数包装它COUNTA()
,并使用它来替换函数中的“5”,SEQUENCE()
这样返回到公式中的内部数组 Excel 使用的行数将是动态的,而不是硬编码的。或者,可以在某个单元格中设置一个函数,该COUNTA()
函数只计算数据中与每个列标题匹配的原始行,而不是使用该FILTER()
部分。前者的优点是永远不会出现不匹配的情况。后者的优点是前者添加了一个复杂的公式块来代替单个数字,而后者只会添加一个单元格引用,因此后者对许多人来说可能更容易维护和改进。