Несколько, если поиск операторов в Excel? - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь преобразовать текст месяца в число

ячейка B2:

BirthMonth_Jan

BirthMonth_Feb

BirthMonth_mar

BirthMonth_Apr

BirthMonth_May

BirthMonth_Jun, т. Д. К декабрю

Например, BirthMonth_Jan выдаст 1 на основе поиска Яна, поэтому я могу сравнить это с другим набором чисел

У меня есть это, и я попробовал это, но работает только с двумя утверждениями if, есть ли вообще возможность сделать это с 12?

=(IF(ISNUMBER(SEARCH("sep",B2)),"9")),(IF(ISNUMBER(SEARCH("aug",B2)),"8")),(IF(ISNUMBER(SEARCH("jul",B2)),"7")),(IF(ISNUMBER(SEARCH("jun",B2)),"6")),(IF(ISNUMBER(SEARCH("may",B2)),"5")),(IF(ISNUMBER(SEARCH("apr",B2)),"4")),(IF(ISNUMBER(SEARCH("mar",B2)),"3")),(IF(ISNUMBER(SEARCH("feb",B2)),"2")),(IF(ISNUMBER(SEARCH("jan",B2)),"1"))

Я получаю #Value!

Если я попробую это, он также не будет работать

=IF(ISNUMBER(SEARCH("dec",B2)),"12",IF(ISNUMBER(SEARCH("nov",B2)),"11")),IF(ISNUMBER(SEARCH("DSH_KnowBe4_BirthMonth_Oc",B2)),"10"))

второй вариант будет работать только с двумя, но если я добавлю больше, он выдаст ошибку

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Кажется вполне возможным, что вы можете захотеть:

=MONTH(MID(B2,SEARCH("BirthMonth_",B2)+11,3)&0)

Возвращает число.

0 голосов
/ 16 ноября 2018

Опрашивающий пытается получить числовой эквивалент частичного названия месяца, извлеченного из строки. Существует множество примеров использования stackoverflow и сети, как правило, на эту тему. В этом случае особенным является частичное название месяца в целевой ячейке и использование оператора IF. Спрашивающий вправе использовать search, поскольку он не чувствителен к регистру

Предлагаются две формулы:

Формула 1
=(IF(ISNUMBER(SEARCH("sep",B2)),"9")),(IF(ISNUMBER(SEARCH("aug",B2)),"8")),(IF(ISNUMBER(SEARCH("jul",B2)),"7")),(IF(ISNUMBER(SEARCH("jun",B2)),"6")),(IF(ISNUMBER(SEARCH("may",B2)),"5")),(IF(ISNUMBER(SEARCH("apr",B2)),"4")),(IF(ISNUMBER(SEARCH("mar",B2)),"3")),(IF(ISNUMBER(SEARCH("feb",B2)),"2")),(IF(ISNUMBER(SEARCH("jan",B2)),"1"))

Спрашивающий сказал: «Я получаю # Значение!»
Это не удивительно, потому что по сути это серия из девяти, автономных, не связанных if операторов, каждый из которых разделен запятой. Это неверное утверждение. Однако, если бы операторы if были вложенными, формула сработала бы. Что-то вроде этого:
=IF(ISNUMBER(SEARCH("jan",B2)),"1",IF(ISNUMBER(SEARCH("feb",B2)),"2",IF(ISNUMBER(SEARCH("mar",B2)),"3")))

Формула 2 =IF(ISNUMBER(SEARCH("dec",B2)),"12",IF(ISNUMBER(SEARCH("nov",B2)),"11")),IF(ISNUMBER(SEARCH("DSH_KnowBe4_BirthMonth_Oc",B2)),"10"))

Так близко и все же так далеко ... Это утверждение использует вложенный подход, упомянутый выше. Существует большая опечатка для поиска в октябре (вместо поиска «oct» формула ищет «DSH_KnowBe4_BirthMonth_Oc»), хотя это не приводит к сбою формулы.

Ошибка вызвана двумя причинами:
1) Двойная скобка, следующая за "11")) в поиске «Ноябрь». Здесь должны быть нулевые скобки.
2) Для формулы требуется дополнительная закрывающая скобка.

Обратите внимание на две вещи:
1) в случае совпадения возвращаемое значение является строкой, а не целым числом.
2) нет условий для возврата значения в случае несоответствия.

Рабочая формула IF IF
Следующая формула, состоящая из вложенных выражений IF, работает так, как задумал спрашивающий.
=IF(ISNUMBER(SEARCH("jan",B2)),"1",IF(ISNUMBER(SEARCH("feb",B2)),"2",IF(ISNUMBER(SEARCH("mar",B2)),"3",IF(ISNUMBER(SEARCH("apr",B2)),"4",IF(ISNUMBER(SEARCH("may",B2)),"5",IF(ISNUMBER(SEARCH("jun",B2)),"6",IF(ISNUMBER(SEARCH("jul",B2)),"7",IF(ISNUMBER(SEARCH("aug",B2)),"8",IF(ISNUMBER(SEARCH("sep",B2)),"9",IF(ISNUMBER(SEARCH("oct",B2)),"10",IF(ISNUMBER(SEARCH("nov",B2)),"11",IF(ISNUMBER(SEARCH("dec",B2)),"12",NA()))))))))))))

Обратите внимание: формула использует функцию NA() для возврата # N / A, если совпадений нет.

VLOOKUP альтернатива
Хотя вышеупомянутая формула работает, я считаю ее сложной и негибкой. В таких ситуациях я предпочитаю VLOOKUP. Моя эквивалентная формула будет:
=VLOOKUP(RIGHT(B2,LEN(B2)-SEARCH("_",B2)),Sheet2!$A$2:$B$13,2,FALSE)
Используя январь в качестве примера: BirthMonth_Jan, поиск формулы работает следующим образом:
RIGHT(B2,LEN(B2)-SEARCH("_",B2))
1) поиск символа подчеркивания SEARCH("_",B2),
2) вычтите результат из общей длины LEN(B2)-SEARCH("_",B2), чтобы указать количество символов справа от подчеркивания.
3) получить все символы справа от подчеркивания RIGHT(B2,LEN(B2)-SEARCH("_",B2)). Это значение поиска
4) Создать справочную таблицу на другом листе (см. Скриншот); найдите эту таблицу и верните столбец 2 (номер за этот месяц).
5) Если нет действительного результата, VLOOKUP автоматически возвращает # N / A.


Справочная таблица на отдельном листе:
Month name lookup table

0 голосов
/ 15 ноября 2018

Не уверен, что вы пытаетесь сделать с формулой, но если ваш текст "BirthMonth_" непротиворечив, вы можете использовать:

=MONTH(DATEVALUE("1 "&SUBSTITUTE(A12,"BirthMonth_","")&" 2018"))

enter image description here

Просмотр ваших данных и ожидаемого результата может помочь, если вы не за этим.

...