Индекс с соответствием с поиском / поиском и положением - PullRequest
0 голосов
/ 19 сентября 2019

У меня довольно сложная проблема, когда мне нужно найти совпадения короткой строки в длинной строке, при этом поиск ограничивается первыми несколькими символами длинной строки.

Возник длинный поискформула этого массива:

{=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

снимок экрана

РЕДАКТИРОВАТЬ: После игры, чтобы узнать, как работает формула, я смог достичь желаемого результата, используя критерии IF для массива FIND:

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

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

используйте Поиск и Слева:

=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

enter image description here

0 голосов
/ 20 сентября 2019

Эта формула массива (используйте 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")}
...