#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)
… и т. д
Затем в конце этих контрольных столбцов суммируйте значения. Затем вы узнаете, если сумма больше нуля, то найдена хотя бы одна из ваших неверных строк, и это вредное значение для пометки.