4

Я создал эту формулу:

=IF(B8="Jan","Feb",IF(B8="Feb","Mar",IF(B8="Mar","Apr",IF(B8="Apr","May",IF(B8="May","Jun",IF(B8="Jun","Jul",IF(B8="Jul","Aug",IF(B8="Aug","Sep",IF(B8="Sep","Oct",IF(B8="Oct","Nov",IF(B8="Nov","Dec",IF(B8="Dec","Jan"))))))))))))

так что когда пользователь выбирает аббревиатуру месяца, то следующая ячейка имеет IE месяца подряд: пользователь вводит октябрь, следующая ячейка становится ноябрем.

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

Если у вас есть какие-либо идеи или вы знаете, как уменьшить эту формулу, это будет высоко оценено.

4 ответа4

5

Вы можете использовать EOMONTH, который позволяет смещению месяца по второму критерию:

=TEXT(EOMONTH(B8 & " 1",1),"mmm")

B8 & " 1" создает строку, которую Excel может интерпретировать как дату.

EOMONTH(...,1) возвращает последний день следующего месяца.

TEXT(...,"mmm") форматирует эту дату как просто сокращенное название месяца.

3

Попробуйте один из: (первый - мой улучшенный ответ в свете ответа PeterH, второй - мой оригинальный ответ)

=TEXT(DATE(2000, MONTH(1 & B8) + 1, 1), "mmm")
=TEXT(DATE(2000, MONTH(DATEVALUE(B8 & " 1")) + 1, 1), "mmm")

Это автоматически обрабатывает ролловер с 12 + 1 = 13 до 1 (интерпретируется как первый месяц следующего года).

шаг за шагом


Функция DATEVALUE() берет текстовую дату и возвращает « серийный номер » даты. В нашем случае мы используем DATEVALUE(B8 & " 1") ... но почему?

Простое использование DATEVALUE("Jan") завершится с #VALUE! ошибка.

Чтобы обойти это, мы ставим на " 1" значение DATEVALUE("Jan 1") , которое Excel с радостью интерпретирует как "1 Jan 2001" - к счастью, нам плевать на год.

YEAR(DATEVALUE("Jan 1")) == 2001

Согласно ответу Петера, MONTH(DATEVALUE(B8 & " 1")) может быть упрощен до MONTH(1 & B8) , также показанного выше.

Здесь 1 & B8 1Jan в 1 Январь , который Excel анализирует счастливо.

2

Другой вариант будет использовать CHOOSE:

=CHOOSE(MATCH(B8,{"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"},0),"FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","JAN")

Или, чтобы еще больше упростить процесс, вы можете использовать MONTH для вычисления номера месяца в B8, а затем использовать его в качестве значения индекса в CHOOSE:

=CHOOSE(MONTH(1&LEFT(B8,3)),"FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","JAN")
-2

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

Проверьте снимок экрана:

Следуй этим шагам:

: Отредактировано:

  • Создайте список месяцев, используя только три символа, как я создал в столбце А.
  • Выберите список месяцев в столбце A и назовите диапазон, имя будет MnthName.
  • В ячейке D91 примените проверку данных, в "вкладке настроек" выберите "Список", а в "источнике" введите Именованный диапазон, MnthName.
  • В ячейке F91 напишите эту формулу:
    =TEXT(DATE(2018,MATCH($D$91,MnthName,0)+COLUMNS($F$91:F91),1),"mmm") .

  • Выберите название месяца из выпадающего списка, в ячейке F91 вы найдете имя следующей моли.

NB

  • Настройте адрес ячейки в соответствии с вашими потребностями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .