Формат Excel VBA (, «ммммм-гг») работает не так, как ожидалось

#excel #vba #date-formatting

#excel #vba #форматирование даты

Вопрос:

В моем листе Excel есть ячейки, содержащие дату.

Формат отображения для этих ячеек — пользовательский формат «mmmmm-yy», так что дата «7/1/16» отображается как «S-16». Этот рабочий формат работает на листе Excel, однако в VBA я пытаюсь вызвать функцию Format() для этих ячеек, она не выдает тот же формат.

 Format( <Date_Cell> , "mmmmm-yy")
  

Выдает

 "April4-16"
  

например, на диаграмме.

Почему Format функция не ведет себя так же, как форматирование ячейки даты?

Редактировать: согласно веб-сайту службы поддержки office, отформатируйте дату так, как вы хотите, я использую правильный формат, но он не дает результата, который, как утверждает веб-сайт, должен.

Редактирование 2: оказывается, форматирование даты ячейки работает иначе, чем функция форматирования VBA, как указывает выбранный ответ.

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

1. У вас слишком много m в части месяца, используйте только 4.

2. Нет, это приводит к полному названию месяца «Июнь-16» вместо «J-16». Согласно веб-сайту службы поддержки office, 5 ‘m — это правильный формат даты так, как вы хотите

Ответ №1:

Значение символов формата формата функции VBA и формата даты Excel не на 100% идентичны.

Вы могли бы использовать функцию рабочего листа TEXT , например:

 Application.Text( <Date_Cell> , "mmmmm-yy")
  

для достижения того, чего вы хотите.

Ответ №2:

Функция VBA Format не поддерживает формат «mmmmm» в качестве первой буквы месяца (см. Документацию для поддерживаемых форматов). Ваш вывод фактически анализируется как «mmmm» (название месяца), затем «m» (номер месяца). Если вам нужна только первая буква месяца, вам нужно будет разобрать ее вручную:

 Left$(MonthName(Month(<Date_Cell>)), 1) amp; "-" amp; Right$(CStr(Year(<Date_Cell>)), 2)
  

Ответ №3:

Еще один вариант:

Измените числовой формат ячейки:

 Range("A1").NumberFormat = "mmmmm-yy"