Вопрос Как Excel обрабатывает состав функций?


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

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

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

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

=DAY(TODAY())

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

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

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

=TODAY()

в ячейке A1, а затем

=DAY(A1)

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

Почему DAY (TODAY ()) не дает ожидаемого результата?

На моем фоне математика и любительского программиста (в Maple, Java и некоторых Python) мой состав функций кажется прекрасным.

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


21
2018-01-18 06:52


происхождения


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


ответы:


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

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


40
2018-01-18 07:15



Это может помочь объяснить Зачем форматирование делает это. Excel хранит временные метки как «дни с 00:00:00 по 0 января 1900 года», с часами, минутами и секундами в виде десятичных знаков дня (полдень 1 января 1900 года «1,5»). - Carl Kevinson
И excel будет использовать по умолчанию дату или форматирование времени, как только будет использоваться любое значение даты / времени. Это может быть либо другая ячейка, которая отформатирована так или TODAY(), На самом деле раздражает, когда вы используете их только в функциях декомпозиции, и вам нужно переключить форматирование обратно. - ratchet freak
Тангенциально релевантно: sciencemag.org/news/2016/08/... [В одной из пяти статей по генетике содержатся ошибки благодаря Microsoft Excel] - Darren Ringer
@ DarrenRinger Я всегда читал это как «обвиняющий их инструменты» - ключевой момент работы и оставаясь бдительным, Подобное случилось со мной (хотя и не по генетике), и, как и все остальные, я думаю, что «Excel изменил эту цифру до ...», в то время как я должен сказать себе: «Черт, я не принимал во внимание, что эта цифра изменится к ..... " - Darren Bartrup-Cook


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

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

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

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

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


9
2018-01-18 18:01





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

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

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

Get Day in Number

NB: 

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

Вы также можете использовать функцию ТЕКСТ, чтобы получить значение «День» в виде текстовых данных.

Значение RED Color имеет формат Custom Cell DD, вы можете применить на Cell (S), чтобы отображать только значения Day для даты (S).

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

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


2
2018-01-18 07:51





Ваша формула составлена ​​правильно. Неожиданный результат объясняется тем, как 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 года.

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

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

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

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


1
2018-01-19 17:38