Excel - 在字符串中搜索完全匹配
Excel - Search an exact match within a string
我目前正在努力寻找可以解决我的问题的公式。
这是现状:
- 在Sheet1,A列,我有一组字符串,如:
/search.action?gender=men&brand=10177&tag=10203&tag=10336
/search.action?gender=women&brand=11579&tag=10001&tag=10138
/search.action?gender=men&brand=12815&tag=10203&tag=10299
/search.action?gender=women&brand=1396&tag=10203&tag=10513
/search.action?gender=women&brand=11&tag=10001&tag=10073
/search.action?gender=women&brand=1396&tag=10203&tag=10336
/search.action?gender=women&brand=13
- 在Sheet2,A列,我有一组字符串如:
品牌=10177
品牌=12815
品牌=13
品牌=1396
品牌=11579
- 最后,在 sheet 1 中,B 列将是我的 "filter" 以及我正在努力寻找的公式。我的公式的目标是检测 sheet 1 中的任何字符串是否存在 sheet 2 中的字符串之一(完全匹配!)。事实上,现在它只能找到近似匹配。如您所见,第 5 行不应该 return 任何内容。但是用我目前的公式它确实如此。
公式如下:
{=IFERROR(INDEX('Sheet 2'!$A:$A;MATCH(1;COUNTIF(A1;"*"&'Sheet 2'!$A:$A&"*");0));"")}
对此事有什么想法吗?
请注意,我不想使用 VBA,宏,而只想使用公式。
非常感谢您的帮助!
我猜以下将解决您的问题:
=VLOOKUP(MID(A2,FIND("&",A2)+1,FIND("&",A2,FIND("&",A2)+1)-FIND("&",A2)-1),Sheet2!A:A,1,FALSE)
基本上使用查找函数,我已经在“&”符号之间确定了字符串的开始和长度。并在 vlookup 中使用。
另一点要提到的是这个公式只寻找前 2 个“&”符号。
为了完整起见,这是另一个基于this answer
的解决方案
=INDEX(Sheet2!$A:$A,MAX(IF(ISERROR(FIND(Sheet2!$A:$A,A1)),-1,1)*(ROW(Sheet2!$A:$A)-ROW(Sheet2!$A)+1)))
这个比较笼统一点,搜索标签有多少都没有关系。
然而,就目前而言,它将在第二个 sheet 中匹配 brand=13,在第一个 sheet 中匹配 brand=1396。为避免这种情况,您可以在搜索字符串中添加一个符号:-
=INDEX(Sheet2!$A:$A,MAX(IF(ISERROR(FIND(Sheet2!$A:$A&"&",A1&"&")),-1,1)*(ROW(Sheet2!$A:$A)-ROW(Sheet2!$A)+1)))
如果不匹配,此公式将抛出 #VALUE 错误:为避免这种情况,您需要在其周围放置一个 IFERROR 语句:-
=IFERROR(INDEX(Sheet2!$A:$A,MAX(IF(ISERROR(FIND(Sheet2!$A:$A&"&",A1&"&")),-1,1)*(ROW(Sheet2!$A:$A)-ROW(Sheet2!$A)+1))),"")
这些都是数组公式
我目前正在努力寻找可以解决我的问题的公式。
这是现状:
- 在Sheet1,A列,我有一组字符串,如:
/search.action?gender=men&brand=10177&tag=10203&tag=10336
/search.action?gender=women&brand=11579&tag=10001&tag=10138
/search.action?gender=men&brand=12815&tag=10203&tag=10299
/search.action?gender=women&brand=1396&tag=10203&tag=10513
/search.action?gender=women&brand=11&tag=10001&tag=10073
/search.action?gender=women&brand=1396&tag=10203&tag=10336
/search.action?gender=women&brand=13
- 在Sheet2,A列,我有一组字符串如:
品牌=10177
品牌=12815
品牌=13
品牌=1396
品牌=11579
- 最后,在 sheet 1 中,B 列将是我的 "filter" 以及我正在努力寻找的公式。我的公式的目标是检测 sheet 1 中的任何字符串是否存在 sheet 2 中的字符串之一(完全匹配!)。事实上,现在它只能找到近似匹配。如您所见,第 5 行不应该 return 任何内容。但是用我目前的公式它确实如此。
公式如下:
{=IFERROR(INDEX('Sheet 2'!$A:$A;MATCH(1;COUNTIF(A1;"*"&'Sheet 2'!$A:$A&"*");0));"")}
对此事有什么想法吗?
请注意,我不想使用 VBA,宏,而只想使用公式。
非常感谢您的帮助!
我猜以下将解决您的问题:
=VLOOKUP(MID(A2,FIND("&",A2)+1,FIND("&",A2,FIND("&",A2)+1)-FIND("&",A2)-1),Sheet2!A:A,1,FALSE)
基本上使用查找函数,我已经在“&”符号之间确定了字符串的开始和长度。并在 vlookup 中使用。
另一点要提到的是这个公式只寻找前 2 个“&”符号。
为了完整起见,这是另一个基于this answer
的解决方案=INDEX(Sheet2!$A:$A,MAX(IF(ISERROR(FIND(Sheet2!$A:$A,A1)),-1,1)*(ROW(Sheet2!$A:$A)-ROW(Sheet2!$A)+1)))
这个比较笼统一点,搜索标签有多少都没有关系。
然而,就目前而言,它将在第二个 sheet 中匹配 brand=13,在第一个 sheet 中匹配 brand=1396。为避免这种情况,您可以在搜索字符串中添加一个符号:-
=INDEX(Sheet2!$A:$A,MAX(IF(ISERROR(FIND(Sheet2!$A:$A&"&",A1&"&")),-1,1)*(ROW(Sheet2!$A:$A)-ROW(Sheet2!$A)+1)))
如果不匹配,此公式将抛出 #VALUE 错误:为避免这种情况,您需要在其周围放置一个 IFERROR 语句:-
=IFERROR(INDEX(Sheet2!$A:$A,MAX(IF(ISERROR(FIND(Sheet2!$A:$A&"&",A1&"&")),-1,1)*(ROW(Sheet2!$A:$A)-ROW(Sheet2!$A)+1))),"")
这些都是数组公式