Формат чисел Excel: что такое [$-409]?

Я автоматизирую Excel, используя систему макросов в качестве руководства к тому, что я должен делать с помощью автоматизации. Когда я форматирую столбец как дату, макрос генерирует NumberFormat для столбца:

[$-409]m/d/yy h:mm AM/PM;@

Я пытаюсь расшифровать, что это на самом деле означает. я понял погуглив, что значения в квадратных скобках представляют собой "условие", и если условие:

$-409

выполняется, то он будет использовать NumberFormat

m/d/yy h:mm AM/PM

если нет, он использует NumberFormat

@

Ссылки, которые я нашел, говорят, что числовой формат "@" является текстовым заполнителем.

Итак, мои вопросы:

  1. Что такое условное тестирование $-409? Сравнивает ли он что-то с -409 (т. е. минус четыреста девять), и если да, то с каким знаком доллара сравнивается?

  2. Если условное выражение терпит неудачу и используется текстовый заполнитель "at-sign", как это отображается?


person Ian Boyd    schedule 21.05.2009    source источник
comment
если вы предоставите примеры даты и времени, которые вы ввели в ячейку, и того, как Excel отформатировал ее, это было бы полезно   -  person V'rasana Oannes    schedule 22.05.2009
comment
Как вы форматировали ячейку по дате, когда записывали макрос? Я только что попробовал то же самое, и созданный код VBA вообще не имел условной части.   -  person e.James    schedule 22.05.2009


Ответы (5)


Чтобы уточнить, что сказали другие:

[$-409] – это код региона, представленный в шестнадцатеричном формате. Префикс даты с определенным кодом локали определяет, что отображается при использовании различных кодов формата даты и времени. Например, используя дату

28 ноября 1973 г., 11:28:13

в качестве примера для следующей таблицы:

Format Code  409 (English United States)  804 (Chinese PRC)
===========  ===========================  =================
m            11                           11
mm           11                           11
mmm          Nov                          十一月
mmmm         November                     十一月
d            27                           27
dd           27                           27
ddd          Mon                          二
dddd         Monday                       星期二
y            73                           73
yy           73                           73
yyy          1973                         1973
yyyy         1973                         1973
AM/PM        AM                           上午

Таким образом, один и тот же код формата с двумя разными идентификаторами локали дает разные результаты:

[$-409]mmmm dd yyyy  h:mm AM/PM
November 27 1973  11:28 AM


[$-804]mmmm dd yyyy  h:mm AM/PM
十一月 27 1973  11:28 上午

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

Константы и строки идентификатора языка (основной источник, archive.is)

Коды локали Windows, отсортированные по локали (archive.is)

Коды локали Windows, отсортированные по локали (< href="https://web.archive.org/web/20040725223808/http://blog.csdn.net/2066/archive/2004/07/20/45555.aspx" rel="noreferrer">архив. org, archive.is)

person Ian Boyd    schedule 22.05.2009
comment
связанный вопрос, не стоит начинать свою тему, но вы, кажется, хорошо знаете предмет... как Excel понимает, что в yyyy-mm-dd hh:mm:ss AM/PM первый мм представляет месяцы, а второй - минуты? ^?^ - person James King; 03.06.2012
comment
Я предполагаю, что они узнают, что yyyy рядом с одним, а hh или ss рядом с другим. /пожал плечами - person Ian Boyd; 04.06.2012
comment
В спецификациях указано, что если m или mm стоит сразу после h или hh, или непосредственно перед s или ss, то это интерпретируется как минуты; в противном случае это месяц. - person John Y; 01.07.2015
comment
Интересно, как это относится к stackoverflow.com/q/53948301/11683, где идентификатор локали выглядит как ,13 /130000 что на первый взгляд кажется бессмысленным. - person GSerg; 27.12.2018
comment
Для более полного списка кодов локали и кодов календаря... ознакомьтесь с моими источниками в этом ответе (который немного отличается)... stackoverflow.com/questions/54134729/ - person IrwinAllen13; 08.02.2019

Нааф и Грант Вагнер четко ответили на вопрос о вашем $-409, так что я просто заполню недостающую часть:

Знак «@» после точки с запятой указывает Excel, как обрабатывать данные, если вы вводите строку вместо действительной даты. @ просто означает «поместите сюда любой текст, дословно».

Несколько быстрых примеров, иллюстрирующих суть:

=TEXT("abc","hh:mm;@")
abc


=TEXT("abc","hh:mm;@@")
abcabc

Подробное описание параметров форматирования текста см. в этой статье.

person e.James    schedule 21.05.2009
comment
Я считаю, что вы ошибаетесь, по крайней мере частично. Даты в Excel хранятся просто как количество дней с 1900 или 1904 года; часть после точки с запятой — это формат, используемый, если базовое число отрицательное. - person ysth; 07.11.2012

Это сообщение объясняет это. По сути, 409 – это идентификатор языка для "английский – США". Например, если вы использовали [$-414], дата будет отформатирована как «норвежский (букмол)».

Я предполагаю, что для вопроса (2) необработанные данные будут представлены в виде строки, а не отформатированы. Быстрый тест подтвердит это.

person Naaff    schedule 21.05.2009

В Excel 2007 есть ошибка, из-за которой все общие форматы изменяются на формат даты типа [$-409].
Обычно использование формата [$-409] допустимо.
Нет исправления для ошибка еще предоставлена ​​Microsoft. Эта ошибка обычно возникает в больших и общих книгах Excel.

Если вы когда-нибудь сталкивались с тем, что все ваши общие форматы меняются на даты, попробуйте перейти к «Стили ячеек», щелкнуть правой кнопкой мыши «Обычный» и изменить «Обычный» обратно на «Общий». Он укажет вам в поле тип формата для нормального. Это ошибка, поскольку обычно она должна быть «общей», а не какой-то версией [$-409].

В итоге мне пришлось полностью удалить формат из книги. Для этого необходимо отменить общий доступ к рабочей книге. Чтобы удалить формат [$-409], указанный выше в разделе «Обычный» тип ячейки, из книги, щелкните правой кнопкой мыши ячейку, выберите «Пользовательский», прокрутите, пока не найдете тип формата [$-409], указанный выше, затем удалите все форматы. вернется обратно к тому, что называется общим.

person Jeff Taplett    schedule 13.07.2010
comment
это не баг, это код культуры. 409 — США, 816 — Португалия. Вы можете проверить с помощью =TEXT(TODAY(), [$-816]d \d\e mmmm \d\e yyyy) возвращает текущую дату, например 4 апреля 2018 года. Если вы используете =TEXT(TODAY(), [$ -409]d \d\e mmmm \d\e yyyy) он вернется 4 апреля 2018 года. abril — это португальское слово, обозначающее апрель. - person Pedro Polonia; 04.04.2018
comment
Технически -0409 я просто код языка. Если вы хотите изменить формат даты, вы должны изменить код календаря, который отличается. Посмотрите мой ответ на этот вопрос - заголовок ="что означает 130000 в коде локали Excel 130000"> stackoverflow.com/questions/54134729/ - person IrwinAllen13; 08.02.2019

[$-409] не является условием. Кажется, это код локали.

Если я отформатирую ячейку в Пользовательском формате [$-409]m/d/yy h:mm AM/PM;@, введу дату: 1/1/9, затем просмотрю форматирование ячейки, я увижу формат Даты m/d/yy h:mm AM/PM с < strong>Язык (местоположение) из English (United States).

Если вы измените формат на что-то вроде [$-439]m/d/yy h:mm AM/PM;@, вы увидите содержимое ячейки на другом языке.

Я не уверен насчет @. Это может указывать, как отображать дату, если правильный шрифт или языковой стандарт недоступен.

Вот список идентификаторов языков, назначенных Microsoft.

person Grant Wagner    schedule 21.05.2009
comment
@ — это текстовый заполнитель. См. мой ответ для грязных подробностей, и спасибо за ссылку на идентификаторы локали. - person e.James; 22.05.2009