【问题标题】:INDEX with MATCH with FIND/SEARCH & positionINDEX 与 MATCH 与 FIND/SEARCH & 位置
【发布时间】:2019-09-19 20:11:30
【问题描述】:

我有一个相当复杂的问题,我需要在长字符串中查找短字符串的匹配项,搜索仅限于长字符串的前几个字符。

长时间搜索发现了这个数组公式:

{=IFERROR(INDEX($A$8:$A$9,MATCH(1,--NOT(NOT(FIND($A$8:$A$9,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$8:$A$9,MATCH(1,--NOT(NOT(IF(FIND($A$8:$A$9,A2)>3,0,1))),0)),"no match")}

【问题讨论】:

  • “前几个字符”是多少个字符?
  • 嗨 BigBen - 我想在前 3 或 4 个字符内进行搜索。
  • 是哪一个? 3个还是4个?请选择。
  • 我会说4,但是公式中不会指定所需的限制并且可以轻松更改吗?
  • 是的,就是这个想法,只是想把它确定下来,以便回答手头的问题。

标签: arrays excel indexing match formula


【解决方案1】:

使用搜索和左键:

=IFERROR(INDEX(A:A,AGGREGATE(15,7,ROW($A$9:$A$10)/(ISNUMBER(SEARCH($A$9:$A$10,LEFT(A2,4+LEN($A$9:$A$10))))),1)),"no match")

将4+ 替换为满足以下条件的字符数:the first few characters of the value

【讨论】:

    【解决方案2】:

    这个数组公式(使用 Ctrl+Shift+Enter)完美运行:

    {=IFERROR(INDEX($A$8:$A$9,MATCH(1,--NOT(NOT(IF(FIND($A$8:$A$9,A2)>3,0,1))),0)),"no match")}
    

    【讨论】:

    • 请务必注意它需要 Ctrl-Shift-Enter 而不是常规的 Enter,以便将来的读者理解。
    猜你喜欢
    • 2021-06-07
    • 2013-08-16
    • 2015-04-06
    • 2021-01-03
    • 2018-06-29
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多