我正在尝试对我执行看起来像反向通配符查找的操作,但是如果有人对更好的公式提出建议,我完全可以接受。
我有一列在单元格ex :(房子是棕色)中有多个单词,然后我有一个表,该表具有一列颜色和一列值ex:(A2 =棕色,B2 = 1738 ),而我想做的是关闭一个vlookup(房子是棕色的)并返回1738的值。
在我看来,公式看起来像这样
=vlookup("the house was brown",sheet2!"*"&A:B&"*",2,false)
在通配符附加到查找值的位置,但这似乎不起作用,我一直在研究通配符的位置,却一无所获。
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
从问题中得到的数据如下:
A1:A4中的数据
鼠标是棕色的
房子是棕色的
车是红色的
知更鸟是红色的
由以下形式的查找表补充
命名范围“ LookupTable”
Col1; Col2
棕色; 5
红色; 6
蓝色; 7
等等
然后是公式
=trim(join(" ",arrayformula(iferror(vlookup((iferror(regexextract(lower(A1),"\b"&LookupTableCol1&"\b"),"")),LookupTable,2,FALSE),""))))
在B1:B4中,其中A1在LookupTable的右上角,给出输出
输出:
5
5 6
6
6
也就是说,查找表中单词的每个实例都由关联的数字标识,并且这些数字在单个单元格中一次列出(用空格隔开)。
请注意,查询表必须使用小写字母才能获得肯定的匹配。
那是你的追求吗?
为便于编辑,测试或完善答案,此处是link对电子表格的显示,该电子表格显示了实际操作,一旦接受答案,我将删除它。
说明其工作原理
(1)通过将正则表达式与字符串文字一起使用来标识LookupTableCol1中是否存在一个查找词。添加到每端的“ \ b”部分可确保将其作为一个整体进行匹配,并且使用lower()函数可确保我们的结果不区分大小写。
(2)然后将其输入到vlookup()中以在查找表中搜索该单词并返回相关值。
(3)如果在regexextract()或vlookup()中未找到匹配项,则使用“ iferror()”删除任何“ N / A”错误。
(4)Arrayformula()用于沿LookupTableCol1重复这些操作并返回一个数组
(5)Join()用于将整个数组连接到单个单元中以提高可读性。
(6)Trim()用于删除由于将join()与包含空白单元格的数组一起使用而导致从arrayformula返回的数组中空白单元格导致的任何前导或尾随空格。