Индекс формулы Excel СООТВЕТСТВУЕТ нескольким критериям поиска

#excel #if-statement #match #formula

#excel #оператор if #совпадение #формула

Вопрос:

Я пытаюсь найти способ сопоставить ИНДЕКС по нескольким критериям, но мне не очень повезло.

У меня есть 3 текстовые записи, которые я хочу пометить «вредным» тегом: «c001«, «c002» и «c003«.. скорее всего, они не будут в отсортированном списке.

 =IFERROR(IF(INDEX(F9:F34,MATCH("*C001*",$B$9:$B$34,0)),"Harmful",""),"")
 

Теперь это выше работает отлично, но каждая комбинация с вложенными операторами IF и IF (ИЛИ формулами не работает для меня!

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

Любые советы / рекомендации будут высоко оценены.

С уважением.

Ответ №1:

Если вы действительно хотели сделать это в одной формуле, попробуйте эту:-

 =IF(SUMPRODUCT(ISNUMBER(FIND({"C001","C002","C003"},B9:B34))*ISNUMBER(F9:F34)),"Harmful","")
 

На самом деле это не совсем то же самое, что и ИНДЕКС / СОВПАДЕНИЕ OP, потому что ноль в F9:F34 в приведенной выше формуле даст ISNUMBER=TRUE и может пометить его как вредный, в то время как ноль в исходной формуле не будет.

Альтернатива:-

 =IF(SUMPRODUCT(ISNUMBER(FIND({"C001","C002","C003"},B9:B34))*N( F9:F34)),"Harmful","")
 

Я собирался добавить, что причина, по которой вложенные IF и OR не работают с формулой OP, заключается в том, что при первом сбое сопоставления выполнение формулы переходит прямо к пустой строке «» в операторе IFERROR, поэтому он не оценивает никаких других условий. Вам нужно будет разделить их примерно так:-

 =IF(IFERROR(INDEX(F9:F34,MATCH("*C001*",$B$9:$B$34,0)),0) IFERROR(INDEX(F9:F34,MATCH("*C002*",$B$9:$B$34,0)),0) IFERROR(INDEX(F9:F34,MATCH("*C003*",$B$9:$B$34,0)),0),"Harmful","")
 

Комментарии:

1. Это работает очень хорошо, однако это работает не так, как я предполагал, я использовал функцию СОПОСТАВЛЕНИЯ, потому что все 3 из них являются заголовками строк, и я хочу, чтобы она помечалась как вредная, только если в одной из этих строк есть значение. Если это имеет смысл.

2. Я не совсем понял, что вы имели в виду, вы хотите сказать, что хотите сказать «Вредно» только в том случае, если найдена одна из строк, а не две или три? Возможно, понадобится пример, чтобы объяснить мне это.

3. Или вы хотели соединить столбец F с B, затем G с C или что-то в этом роде?

Ответ №2:

Есть ли особая причина, по которой он должен быть в форме индексной функции, или все должно выполняться в одном столбце? (Если это так, я рискну предположить, что в вашей формуле вы хотите, чтобы функция INDEX просматривала тот же столбец B, который находится в вашей функции СОПОСТАВЛЕНИЯ ?… может быть, одна из причин, по которой он не работает?)

Более простым решением, имхо, было бы добавить несколько новых столбцов рядом с вашим списком, которые проверяют наличие каждой из ваших строк поиска, и записать флаг 1, который подтверждает существование. Вероятно, вам нужна функция FIND, которая возвращает ошибку, если она не может найти ссылочную строку.

т.е.

в ячейке H9 =IF(ISERROR(FIND("C001",F$9)),1,0)

в ячейке I9 =IF(ISERROR(FIND("C002",F$9)),1,0)

… и т. д

Затем в конце этих контрольных столбцов суммируйте значения. Затем вы узнаете, если сумма больше нуля, то найдена хотя бы одна из ваших неверных строк, и это вредное значение для пометки.