Как Excel обрабатывает композицию функций?


21

Я пытался использовать функции, чтобы получить сегодняшний день как число в Excel. Например, когда я писал этот вопрос, я должен был получить 18 долларов.

Я пытался использовать:

  1. функция, TODAY()которая возвращает сегодняшнюю дату в формате даты.
  2. Day(<date>)который возвращает номер дня <date>. То есть DAY(19/05/1984)должно вернуться 19.

Следовательно, формула

=DAY(TODAY())

должен дать результат, который я хотел.

Однако это возвращение 18.01.1900 (при использовании функции сегодня)

Если я использую

=TODAY()

в ячейке А1, а затем

=DAY(A1)

в другой камере я получаю правильный результат.

Почему ДЕНЬ (СЕГОДНЯ ()) не дает ожидаемого результата?

Исходя из моего опыта математика и программиста-любителя (в Maple, Java и некоторых Python), моя композиция функций выглядит хорошо.

В целом, как Excel обрабатывает состав формул?


11
Правильный ответ - «плохо».
Карл Виттофт,

Поддержка Office для функций Excel .. он даже говорит: =DAY(TODAY())... Возвращает текущий день месяца (1 - 31) ..
txtechhelp

Ответы:


40

Ваша формула верна; способ, которым Excel форматирует ячейки, сбивает с толку. Например, если вы вручную установите значение ячейки, 18а затем измените формат на дату, он будет отображаться как January 18, 1900.

Если вы измените формат ячейки с вашей формулой на «Общий», он должен отобразить ожидаемый результат.


3
Это может помочь объяснить, почему форматирование делает это. В Excel хранятся метки времени как «дни с 00:00:00 января 1900 года», где часы, минуты и секунды являются десятичными числами дня (1 января 1900 года в полдень - «1,5»).
Карл Кевинсон

И Excel по умолчанию будет форматировать дату или время, как только будет использоваться любое значение даты / времени. Это может быть либо другая ячейка, отформатированная как эта, либо как функции TODAY(). Действительно раздражает, когда вы используете их только в функциях декомпозиции и вам приходится переключать форматирование обратно.
фрик с трещоткой

1
Тангенциально значимо: sciencemag.org/news/2016/08/… [ Каждая пятая генетическая статья содержит ошибки благодаря Microsoft Excel]
Даррен Рингер

@DarrenRinger Я всегда читал это как «обвинять свои инструменты» - ключевой момент в том, чтобы бумага оставалась бдительной . Подобное произошло со мной (хотя и не в области генетики), и, как и все остальные, я думаю, что «Excel изменил эту цифру на…», хотя я должен был сказать себе «черт, я не учел, что эта цифра изменится к ..... "
Даррен Бартруп-Кук

9

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

Как использовать даты и время в Excel

В Excel числа используются для представления дат (возможно, дробное число дней с 0 января 1900 года), но в Excel они сохраняются и обрабатываются как числа. TODAY () - это числовая функция, а DAY () - это функция от числового аргумента до числового результата.

В вашем случае DAY (TODAY ()) правильно вернул 18 (число), которое, я полагаю, вы присвоили ячейке, отформатированной для отображения даты в краткой форме - так что 18 отображается как 18.01.1900. Потому что для Excel, когда 18 интерпретируется как дата, вот что это значит.

Если вы отформатируете эту ячейку в числовом формате, вы увидите ответ, отображаемый так, как вы ожидали, то есть 18.


2

Нет ничего плохого в вашей формуле. То, что я хотел бы предложить вам, если Формула не дает ожидаемый результат, то она либо дает Ошибка или Неправильный результат. Поскольку вы не упомянули, что в Формуле есть повар!

В то же время я хотел бы показать вам, как можно получить значение DAY в Number в Excel.

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

Получить день в номере

NB:

Дата находится в ячейке E166 . Во втором столбце F есть результаты, а в третьем столбце G показана формула, для которой я использовал.

Вы также можете использовать функцию TEXT, чтобы получить значение дня в виде текстовых данных.

Значение имеет КРАСНЫЙ Цвет имеет пользовательский формат ячейки DD, вы можете применить к ячейке (S), чтобы показать только дневные значения даты (S).

Обратите внимание, я предложил вам все возможности, так как вы упомянули, что в основном вы не являетесь пользователем Excel.

Надеюсь, это поможет вам, не забудьте опубликовать ОШИБКУ, которую дала ваша Формула.


1

Ваша формула составлена ​​правильно. Неожиданный результат связан с тем, как различные типы данных хранятся в Excel.

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

Система дат 1900 года

В системе дат 1900 первый поддерживаемый день - 1 января 1900 года. Когда вы вводите дату, дата преобразуется в серийный номер, который представляет количество прошедших дней с 1 января 1900 года. Например, если вы введите 5 июля 1998 года, Excel преобразует дату в серийный номер 35981.

По умолчанию Microsoft Excel для Windows использует систему дат 1900 года. Система дат 1900 года обеспечивает лучшую совместимость между Excel и другими программами для работы с электронными таблицами, такими как Lotus 1-2-3, которые предназначены для работы под MS-DOS или Microsoft Windows.

Система дат 1904 года

В системе дат 1904 первый поддерживаемый день - 1 января 1904 года. Когда вы вводите дату, дата преобразуется в серийный номер, представляющий количество прошедших дней с 1 января 1904 года. Например, если вы введите 5 июля 1998 года, Excel преобразует дату в серийный номер 34519.

По умолчанию Microsoft Excel для Macintosh использует систему дат 1904 года. Из-за конструкции ранних компьютеров Macintosh даты до 1 января 1904 года не поддерживались. Этот дизайн был призван предотвратить проблемы, связанные с тем, что 1900 год не был високосным. Если вы переключитесь на систему дат 1900 года, Excel для Macintosh поддерживает даты уже с 1 января 1900 года.

Эти выдержки были взяты из: https://support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel

Серийный номер представляет собой простой текущий счетчик числа дат с 1 января 1900 года, включая фиктивную дату 29 февраля 1900 года. Однако функцию DAY можно дополнительно рассматривать как функцию преобразования типов данных. Он принимает серийный номер даты в качестве входных данных и возвращает целое число в качестве выходных данных. В вашем примере, если мы думаем о 18 как о представлении серийных дат и считаем 18 дней вперед с 1 января 1900 года, мы получим 18 января 1900 года.

Простое исправление в интерфейсе - изменить формат ячейки на что-то другое, например, Number или General . Это скажет Excel показать его вам как целое число, а не пытаться интерпретировать его как серию дат. На заднем плане все хорошо, чтобы пойти. Целочисленный результат может использоваться в любой другой формуле и будет вести себя корректно.

В качестве примера, скажем, мы хотели создать условную формулу, которая сообщит нам, прошло ли 15-е число в текущем месяце. Мы можем сделать это используя:

=IF(DAY(TODAY())>15,"The 15th has passed","It is not yet the 15th")

Было бы гораздо труднее достичь того же результата с использованием серийного номера, поэтому функция DAY, возвращающая целое число, оказывается более полезной в контексте общих случаев использования Excel.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.