Формат чисел Excel Категория: Дата или Пользовательский? (ввод пользователя: «1 января 2020») - PullRequest
1 голос
/ 29 апреля 2020

Категория числовых форматов: почему она была признана пользовательской?

Проверено на следующих платформах

  • Excel на Ма c (16.37)
  • Excel на Windows (версия 2002)
  • Excel онлайн

Мой клиент задает вопрос: когда он вводит «1 янв 2020» в ячейку, Excel распознает и преобразует в 1 января 2020 года, когда вы дважды щелкнете по ячейке, войдя в ячейку. режим редактирования, значение изменено на 2020/1/1. enter image description here

Однако при проверке формата номера он был классифицирован как пользовательский

enter image description here

In Дата категории, там формат точно соответствует тому, что Excel подарок для клиента.

enter image description here

Так может ли кто-то поделиться некоторой информацией о том, почему пользовательский ввод «1 января 2020» считается пользовательским, а не датой?

1 Ответ

1 голос
/ 01 мая 2020

Я получил ответ: если вы выберете нужный формат, а затем переключитесь на пользовательский, этот диалог покажет вам, какие коды форматирования использовались в Excel. В этом случае фактический формат даты - [$-en-US]d-mmm-yy;@, а не автоопределение d-mmm-yy.

. Разница между этими двумя форматами заключается в том, что d-mmm-yy будет локализован для разных пользовательских локалей, но [$-en-US]d-mmm-yy;@ не будет , Это связано с Engli sh (США). В Windows его можно изменить в зависимости от языкового стандарта пользователя с помощью Win + R -> intl.cpl.

Логика Excel c предназначена для получения числового формата и последующего линейного поиска по всем категориям. видеть, что это существует где угодно. В конечном итоге это будет в Custom для обоих форматов, которые по умолчанию используются в Custom, но также и в том случае, если совпадений не найдено вообще. 1 jan 2020 не относится к категории Дата - формат d-ммм-гг, который не соответствует ни одному формату в категории данных; он соответствует формату в категории «Пользовательский», поэтому он относится к категории «Пользовательский».

Вот простой обходной путь в VBA, добавленный в модуль рабочей книги, новые записи будут иметь ожидаемый формат:

Private Sub Workbook_SheetChange(ByVal Sheet As Object, ByVal Target As Range)
    With Sheet
        If Target.NumberFormat = "d-mmm-yy" Then
            Target.NumberFormat = "[$-en-US]d-mmm-yy;@"
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...