INDEX with MATCH with FIND/SEARCH & position
INDEX with MATCH with FIND/SEARCH & position
我有一个相当复杂的问题,我需要在长字符串中查找短字符串的匹配项,搜索仅限于长字符串的前几个字符。
长时间搜索找到了这个数组公式:
{=IFERROR(INDEX($A:$A,MATCH(1,--NOT(NOT(FIND($A:$A,A1))),0)),"no match")}
这样我就可以完成部分工作,但如果在前几个字符中找不到值,我不想获得匹配项,而且我不知道如何完成此操作。
我如何调整上述公式以将搜索限制在值的前几个字符内,从而使公式与单元格 A3 和 A6 中的值不匹配,并在 Col-C 中返回所需的结果?还是我应该使用不同的公式?
这里是一个数据样本(我的数据比较复杂,但是原理是一样的):
A (value) B (result with current formula) C (desired result)
1 1apple1234567890 apple apple
2 12apple123456789 apple apple
3 123456apple12345 apple no match
4 1peach1234567890 peach peach
5 12peach123456789 peach peach
6 123456peach12345 peach no match
7
8 apple
9 peach
screenshot
编辑:
在尝试了解公式的工作原理后,我能够使用 FIND 数组的 IF 条件获得所需的结果:
{=IFERROR(INDEX($A:$A,MATCH(1,--NOT(NOT(IF(FIND($A:$A,A2)>3,0,1))),0)),"no match")}
使用搜索和左转:
=IFERROR(INDEX(A:A,AGGREGATE(15,7,ROW($A:$A)/(ISNUMBER(SEARCH($A:$A,LEFT(A2,4+LEN($A:$A))))),1)),"no match")
用满足的字符数替换4+
:the first few characters of the value
这个数组公式(使用 Ctrl+Shift+Enter)完美运行:
{=IFERROR(INDEX($A:$A,MATCH(1,--NOT(NOT(IF(FIND($A:$A,A2)>3,0,1))),0)),"no match")}
我有一个相当复杂的问题,我需要在长字符串中查找短字符串的匹配项,搜索仅限于长字符串的前几个字符。
长时间搜索找到了这个数组公式:
{=IFERROR(INDEX($A:$A,MATCH(1,--NOT(NOT(FIND($A:$A,A1))),0)),"no match")}
这样我就可以完成部分工作,但如果在前几个字符中找不到值,我不想获得匹配项,而且我不知道如何完成此操作。
我如何调整上述公式以将搜索限制在值的前几个字符内,从而使公式与单元格 A3 和 A6 中的值不匹配,并在 Col-C 中返回所需的结果?还是我应该使用不同的公式?
这里是一个数据样本(我的数据比较复杂,但是原理是一样的):
A (value) B (result with current formula) C (desired result)
1 1apple1234567890 apple apple
2 12apple123456789 apple apple
3 123456apple12345 apple no match
4 1peach1234567890 peach peach
5 12peach123456789 peach peach
6 123456peach12345 peach no match
7
8 apple
9 peach
screenshot
编辑: 在尝试了解公式的工作原理后,我能够使用 FIND 数组的 IF 条件获得所需的结果:
{=IFERROR(INDEX($A:$A,MATCH(1,--NOT(NOT(IF(FIND($A:$A,A2)>3,0,1))),0)),"no match")}
使用搜索和左转:
=IFERROR(INDEX(A:A,AGGREGATE(15,7,ROW($A:$A)/(ISNUMBER(SEARCH($A:$A,LEFT(A2,4+LEN($A:$A))))),1)),"no match")
用满足的字符数替换4+
:the first few characters of the value
这个数组公式(使用 Ctrl+Shift+Enter)完美运行:
{=IFERROR(INDEX($A:$A,MATCH(1,--NOT(NOT(IF(FIND($A:$A,A2)>3,0,1))),0)),"no match")}