Это глава из книги Билла Джелена Гуру Excel расширяют горизонты: делайте невозможное с Microsoft Excel.
Задача: Excel хранит дату как число дней, прошедших с 1 января 1900 года. Это означает, что все функции даты не работают для дат XVIII в. и более ранних. Это проблема для историков и генеалогов (людей, занимающихся генеалогией).
Решение: предлагается формула, которая работает с любыми датами с 1 января 1000 г. Она основана на добавлении 1000 лет ко всем датам. Таким образом, допустимая дата, например, 23 января 2009, станет 23 января, 3009. При этом недопустимая дата, например, 17 февраля 1865, станет допустимой – 17 февраля 2865. Поскольку Excel может работать с датами вплоть до 9999 года, то с этой стороны проблем не предвидится.
Введите начальную и конечную даты в ячейки А4 в В4 (рис. 1). Используйте, например, формат 17/02/1865. Если ваша дата после 1900, Excel автоматически преобразует дату в порядковый номер. Если дата до 1900, Excel сохранит ее в виде текста. Я использовал условное форматирование для области А4:В14 на основе формулы =НЕ(ЕТЕКСТ(A4)), которое подкрасило ячейки с датами.
Рис. 1. Кажется, что Excel обрабатывает даты до 1900 года, когда вы используете спецформулу
Скачать заметку в формате Word или pdf, примеры в формате Excel
Если ячейка содержит допустимую дату, вы добавляете 1000 лет. Простой способ сделать это – использовать функцию ДАТАМЕС(А4;12000). Эта функция возвращает дату, которая на 12 000 месяцев (1000 лет) отстоит от начальной даты, указанной в первом аргументе функции ДАТАМЕС. Обратите внимание, что эта функция появилась в Excel 2007. В более ранних версиях эта функция доступна после установки надстройки Пакет анализа. Вместо этого можете использовать формулу: =ДАТА(ГОД(А4)+1000;МЕСЯЦ(А4);ДЕНЬ(А4)).
Если ячейка содержит недопустимую дату (до 1900 г.), вам нужно разбить дату в текстовом виде на элементы, добавить 1000 лет к годам, после чего обратно склеить элементы:
- Получите левую часть даты (дни, месяцы и разделитель) =ЛЕВСИМВ(A4;ДЛСТР(A4)-4)
- Получите год =ПРАВСИМВ(A4;4)
- Добавьте 1000 лет к году =ПРАВСИМВ(A4;4)+1000
- Сцепите дни, месяцы и год =ЛЕВСИМВ(A4;ДЛСТР(A4)-4)&ПРАВСИМВ(A4;4)+1000
- Преобразуйте текст, полученный на предыдущем шаге в дату =ДАТАЗНАЧ(ЛЕВСИМВ(A4;ДЛСТР(A4)-4)&ПРАВСИМВ(A4;4)+1000)
Теперь необходимо избирательно использовать, либо фрагмент с ДАТАМЕС, либо фрагмент с ДАТАЗНАЧ, в зависимости от того, как Excel воспринимает содержимое ячейки: как дату, или как текст. Если кратко, то формула в С4: =ЕСЛИ(ЕТЕКСТ(А4);ДАТАЗНАЧ();ДАТАМЕС()). Полностью формула: =ЕСЛИ(ЕТЕКСТ(A4);ДАТАЗНАЧ(ЛЕВСИМВ(A4;ДЛСТР(A4)-4)&ПРАВСИМВ(A4;4)+1000); ДАТАМЕС(A4;12000)). Скопируйте ее в ячейку D4, чтобы получить измененную дату для столбца В. Теперь вы можете использовать эти результаты с любой функцией даты. Например, в Е4 с помощью формулы =D4-C4 вы просто определите разность между конечной и начальной датой в днях. А в F4 с помощью формулы =РАЗНДАТ(C4;D4;»y») разность D4-C4 в полных годах. В ячейке G4 формулы из С4, D4 и Е4 объединены в одну мегаформулу: =ЕСЛИ(ЕТЕКСТ(B4);ДАТАЗНАЧ(ЛЕВСИМВ(B4;ДЛСТР(B4)-4)&ПРАВСИМВ(B4;4)+1000);ДАТАМЕС(B4;12000))-ЕСЛИ(ЕТЕКСТ(A4);ДАТАЗНАЧ(ЛЕВСИМВ (A4;ДЛСТР(A4)-4)&ПРАВСИМВ(A4;4)+1000);ДАТАМЕС(A4;12000))
Не забудьте, что в Англии и колониях переход с юлианского на григорианский календарь привел к тому, что вслед за 2 сентября 1752 года наступило сразу 14 сентября. В России вслед за 31 января 1918 года наступило 14 февраля (подробнее см. Григорианский календарь). Предложенная формула не обрабатывает эти аномалии.
Резюме: несмотря на то, что Excel не умеет напрямую работать с датами до 1900 года, вы можете добавить ко всем датам некое фиксированное число лет (например, 1000), и сделать доступным обработку формулами дат.
Источник. Эта формула была предложена Барри Гудини.
Впервые столкнулся с тем, что excel не всемогущ ))) а потом свести их к единой формуле «григорианская дата (юлианская дата)» тут второй вопрос Сделать это на Маке и без макросов Изменено: Илья Кудряшов — 13.12.2014 15:28:32 |
|
vikttur Пользователь Сообщений: 47199 |
Вопрос общий, не только для Мака. |
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
Был когда-то «студенческий» вариантик — припас, однако… «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
Если общий, переносите, конечно |
|
Илья Кудряшов Пользователь Сообщений: 29 |
#5 13.12.2014 15:27:55
Макросы. Под виндами |
||
vikttur Пользователь Сообщений: 47199 |
#6 13.12.2014 15:31:13 Получается, вопрос не общий.
Изменено: vikttur — 13.12.2014 15:36:58 |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
#7 13.12.2014 15:52:22
Большинство работает нормально. |
||
vikttur, да, получилось собрать дату |
|
vikttur Пользователь Сообщений: 47199 |
Вы принцип формировния поняли? |
да, я принцип понял |
|
Z Пользователь Сообщений: 6111 Win 10, MSO 2013 SP1 |
#11 13.12.2014 16:52:10
Как вариант — «Работа«… «Ctrl+S» — достойное завершение ваших гениальных мыслей!.. |
||
Вот отсюда идем сюда Есть и для винды, и для мака. |
|
Илья Кудряшов Пользователь Сообщений: 29 |
#13 15.12.2014 12:11:00
Спасибо Сервис — Надстройки Если это так, то вставил, наверное… Но excel по-прежнему введенную дату 10.05.1805 не воспринимает как дату и не позволяет делать с ней вычислений Изменено: Илья Кудряшов — 15.12.2014 13:06:26 |
||
Максим Зеленский Пользователь Сообщений: 4646 Microsoft MVP |
#14 15.12.2014 16:02:34
Для работы с ранними датами используйте функции, указанные по той ссылке. Сам по себе Excel все равно не воспримет ваши старые даты как положено F1 творит чудеса |
|
Если возникла необходимость выполнить вычисления с датами до 01.01.1900, то придется прибегнуть к некоторым ухищрениям, чтобы использовать встроенные функции
EXCEL
для работы с датами.
Чтобы иметь возможность использовать встроенные функции EXCEL необходимо, чтобы даты были в диапазоне от 01.01.1900 до 31.12.9999. Но, иногда, этого диапазона дат недостаточно. Рассмотрим типичную задачу, в которой может возникнуть необходимость использования дат
до 01.01.1900.
Задача
Определим сколько лет, месяцев и дней прожил Джордж Ноэл Гордон Байрон (дата рождения 22.01.1788, дата смерти 19.04.1824).
Решение
Для решения воспользуемся функцией
РАЗНДАТ()
, но перед этим прибавим к датам рождения и смерти по 2000 лет, чтобы иметь возможность использовать эту функцию, т.к на вход
РАЗНДАТ()
можно подавать даты от 01.01.1900 до 31.12.9999. (см.
файл примера
).
Почему мы прибавили 2000 лет, а не, например, 1000? Это сделано для того чтобы учесть
високосный ли год
. Дело в том, что согласно действующего Григорианского календаря, год кратный 4 – високосный, но если год кратен 100, то он не считается високосным. А вот если он еще и кратен 400, то он все-таки високосный. Поэтому для обеспечения точности до дней лучше прибавлять к датам до 01.01.1900 величины кратные 400, т.е. 2000, а не 1000. В нашем случае, конечно, можно было бы прибавить и 400 лет, чтобы попасть в диапазон от 01.01.1900 до 31.12.9999.
Если в ячейку ввести значение 22.01.1788, то EXCEL воспримет его как текст. Как же прибавить к дате 22.01.1788, представляющей собой текстовое значение, 2000 лет? Для этого в файле примера день, месяц и год рождения/ смерти введены в отдельные ячейки. Затем к году необходимо прибавить 2000 лет и, наконец, перевести получившееся значение в формат даты с помощью функции
ДАТА()
:
=ДАТА(B7;B5;B4)
.
Для подсчета полного времени жизни с точностью до дня можно использовать формулу:
=РАЗНДАТ(B8;C8;»y»)&» лет » &РАЗНДАТ(B8;C8;»ym»)&» мес. » &РАЗНДАТ(B8;C8;»md»)&» дн.»
Итак, Байрон прожил 36 лет 2 месяца и 28 дней.
ВНИМАНИЕ!
Как показано в статье с описанием недокументированной функции
РАЗНДАТ()
, эта функция с параметром «md» может вернуть ошибочное значение (ошибка м.б. несколько дней в зависимости от версии EXCEL).
О том как EXCEL хранит дату можно прочитать в одноименной статье
Как EXCEL хранит дату и время
.
As a comment
— dates in Excel are actually integer numbers where 1 is equal to Jan 01, 1900 (if we speak about PC version). However, if format zero as date it will be returned as Jan 00, 1900 which could be interpreted as Dec 31, 1899.
— there are quite many techniques how to work with dates before 1900. Since such dates are interpreted as text it very depends on in which format your dates are presented since in any case you need to parse your text to substruct element of the date (year, month, day), convert to numbers and compare with another date (which is the number if after 1900 or another text). Or by adding few thousand of years to each date.
— if some dates are before shifting from Julian on Georgian calendar that also shall be taken into account adjusting the result on the days of shift.
— all above could be done in few ways
by different kind of formulas (google will provide the samples)
with using VBA. The starting point could be Microsoft sample How to calculate ages before 1/1/1900 in Excel or you may generate your own macro taking into account what built-in VBA function DateDiff works correctly with dates starting from year 100 (if dates text representation is in your locale format).
using Power Query (Get&Transform). It correctly interprets dates before 1900 if convert them from text to date. The only point of final step after you calculate durations not to forget return format back to text before loading resulting table into the Excel sheet. Power Query even recognizes the dates if the text is in long/short date formats like December 25, 1865.
Содержание
- Microsoft Excel
- Как в Excel работать с датами, предшествующим 1900 году
- Как вычислить возраст до 01.01.1900 в Excel
- Аннотация
- Использование макроса для вычисления возраста
- Ссылки
- Системы дат в Excel
- Система дат 1900
- Система дат 1904 г.
- Разница между системами дат
- Изменение системы дат по умолчанию
- Дополнительные сведения
- Excel. Даты до 1900 года
- Как Excel хранит дату и время
- Пример
Microsoft Excel
трюки • приёмы • решения
Как в Excel работать с датами, предшествующим 1900 году
В соответствии с позицией Excel мир начал свое существование 1 января 1900 года. Если вы работаете с исторической информацией, то уже могли заметить, что Excel не распознает даты до 1900 года. Например, если ввести в ячейку Июль 4, 1776, Excel интерпретирует это как текст, а не как дату.
К сожалению, единственный способ работы с датами, предшествующими 1900 году, состоит в том, чтобы ввести дату в ячейку в качестве текста. Проблема, однако, заключается в том, что вы не можете выполнить никакое преобразование с датами, поскольку они распознаются как текст. Например, вы не можете изменить числовое форматирование даты, определить, какой день недели выпал на определенную дату, вычислить дату, которая наступит через семь дней.
Для того чтобы выполнять сортировки по датам, которые предшествуют 1900 году, вводите год, месяц и день в отдельных ячейках (рис. 93.1).
Рис. 93.1, Чтобы выполнять сортировку по датам, предшествующим 1900 году, введите год, месяц и день в отдельных ячейках
Для сортировки президентов по дню рождения выполните сортировку, во-первых, по возрастанию для столбца D, во-вторых, по возрастанию для столбца С и, в-третьих, по возрастанию для столбца В. Результат показан на рис. 93.2. К сожалению, вы не можете выполнять другие связанные с датами операции для дат, предшествующих 1900 году. Например, вы не можете выполнить вычитание для определения возраста.
Рис. 93.2. Президенты отсортированы по дню рождения
Источник
Как вычислить возраст до 01.01.1900 в Excel
Аннотация
Хотя формулы дат Microsoft Excel могут использовать только даты, введенные в период с 1.01.1900 до 31.01.9999, вы можете использовать пользовательскую функцию Microsoft Visual Basic для приложений для расчета возраста (в годах) человека или того, что было впервые создано до 1 января 1900 г.
Использование макроса для вычисления возраста
Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.
Excel вводит даты до 01.01.1900 в качестве текста. Эта функция работает для дат, введенных в виде текста, начиная с 1/1/0001, обычных дат и может обрабатывать даты, когда начальная дата до 1900 и конечная дата после 1900. Чтобы использовать макрос, выполните следующие действия:
Запустите Excel. Просмотрите лист, на котором вы хотите использовать функцию.
Нажмите клавиши ALT+F11, чтобы перейти в редактор Visual Basic.
В меню Вставка выберите Модуль.
Введите следующий код в модуле:
Введите следующие данные:
В ячейке A3 введите следующую формулу:
Startdate — это ссылка на первую дату (A1), а enddate — это ссылка на вторую дату (A2).
Результат должен быть 58.
Проверьте допустимость всех дат до 1.01.1900. Даты, введенные как текст, не проверяются в Excel.
Ссылки
Дополнительные сведения об использовании примера кода, приведенного в этой статье, см. в статье о запуске примера кода из статей базы знаний в Office 2010.
Источник
Системы дат в Excel
Excel поддерживает две системы дат: систему дат 1900 и систему дат 1904. В каждой системе дат используется уникальная начальная дата, с которой вычисляются все остальные даты книги. Все версии Excel для Windows вычисляют даты на основе системы дат 1900. Excel 2008 для Mac и более ранних Excel для Mac вычисляют даты на основе системы дат 1904. Excel 2016 для Mac и Excel для Mac 2011 используют систему дат 1900, которая гарантирует совместимость с Excel для Windows.
При копировании дат из книги, созданной в более ранней версии, в книгу, созданную в Excel 2016 или 2011 для Mac, они будут преобразовываться автоматически, если в параметрах > > Параметры даты не будет отключен параметр «Автоматически преобразовывать систему дат». Если этот параметр отключен, вы получите сообщение с вопросом, следует ли преобразовывать даты при вклеии. У вас есть два варианта действий. Вы можете преобразовать даты, чтобы использовать систему дат 1900 (рекомендуется). Этот параметр делает даты совместимыми с другими датами в книге. Вы также можете сохранить систему дат 1904 только для вклеиных дат.
Примечание: Даты, скопированные в составе диаграммы, нельзя преобразовать из системы дат 1904 г. и могут различаться примерно на четыре года. Эти даты необходимо преобразовать вручную.
Система дат 1900
В системе дат 1900 даты вычисляются с использованием 1 января 1900 г. в качестве отправной точки. При вводе даты она преобразуется в порядковый номер, который представляет количество дней, за которое прошло с 1 января 1900 г. Например, если ввести 5 июля 2011 г., Excel преобразует дату в число 40729. Это стандартная система дат в Excel для Windows, Excel 2016 для Mac и Excel для Mac 2011. Если вы решите преобразовать вкопированные данные, Excel скорректирует значения, а вкопированные даты будут соответствовать скопированные даты.
Система дат 1904 г.
В системе дат 1904 даты вычисляются с использованием 1 января 1904 г. в качестве отправной точки. При вводе даты она преобразуется в порядковый номер, который представляет количество дней, за которое прошло с 1 января 1904 г. Например, если ввести 5 июля 2011 г., Excel преобразует дату в число 39267. Это стандартная система дат в более ранних версиях Excel для Mac. Если вы решили не преобразовывать данные и сохранить систему дат 1904 г., то вкопированные даты будут отличаться от дат, которые вы скопировали.
Разница между системами дат
Так как в двух системах дат используются разные начальные дни, в каждой системе дат одинаковые даты представлены разными серийными номерами. Например, 5 июля 2011 г. может иметь две разные серийные номера:
Разница между двумя системами дат составляет 1462 дня. Это означает, что порядковый номер даты в системе дат 1900 всегда на 1462 дня больше, чем в системе дат 1904. 1462 дня — это четыре года и один день (включая один високосный день).
Изменение системы дат по умолчанию
Выберите Файл > Параметры.
(В Excel 2007 нажмите кнопку Microsoft Office кнопку и выберите Excel параметры.)
Выберите пункт Дополнительно.
В области При вычислении этой книгивыберите или clear Use 1904 date system.
В меню Excel выберите пункт Параметры.
В списке Формулы и спискивыберите вычисление .
Выберите или сберем его, чтобы использовать систему дат 1904.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Источник
Excel. Даты до 1900 года
Задача: Excel хранит дату как число дней, прошедших с 1 января 1900 года. Это означает, что все функции даты не работают для дат XVIII в. и более ранних. Это проблема для историков и генеалогов (людей, занимающихся генеалогией).
Решение: предлагается формула, которая работает с любыми датами с 1 января 1000 г. Она основана на добавлении 1000 лет ко всем датам. Таким образом, допустимая дата, например, 23 января 2009, станет 23 января, 3009. При этом недопустимая дата, например, 17 февраля 1865, станет допустимой – 17 февраля 2865. Поскольку Excel может работать с датами вплоть до 9999 года, то с этой стороны проблем не предвидится.
Введите начальную и конечную даты в ячейки А4 в В4 (рис. 1). Используйте, например, формат 17/02/1865. Если ваша дата после 1900, Excel автоматически преобразует дату в порядковый номер. Если дата до 1900, Excel сохранит ее в виде текста. Я использовал условное форматирование для области А4:В14 на основе формулы =НЕ(ЕТЕКСТ(A4)), которое подкрасило ячейки с датами.
Рис. 1. Кажется, что Excel обрабатывает даты до 1900 года, когда вы используете спецформулу
Скачать заметку в формате Word или pdf, примеры в формате Excel
Если ячейка содержит допустимую дату, вы добавляете 1000 лет. Простой способ сделать это – использовать функцию ДАТАМЕС(А4;12000). Эта функция возвращает дату, которая на 12 000 месяцев (1000 лет) отстоит от начальной даты, указанной в первом аргументе функции ДАТАМЕС. Обратите внимание, что эта функция появилась в Excel 2007. В более ранних версиях эта функция доступна после установки надстройки Пакет анализа. Вместо этого можете использовать формулу: =ДАТА(ГОД(А4)+1000;МЕСЯЦ(А4);ДЕНЬ(А4)).
Если ячейка содержит недопустимую дату (до 1900 г.), вам нужно разбить дату в текстовом виде на элементы, добавить 1000 лет к годам, после чего обратно склеить элементы:
- Получите левую часть даты (дни, месяцы и разделитель) =ЛЕВСИМВ(A4;ДЛСТР(A4)-4)
- Получите год =ПРАВСИМВ(A4;4)
- Добавьте 1000 лет к году =ПРАВСИМВ(A4;4)+1000
- Сцепите дни, месяцы и год =ЛЕВСИМВ(A4;ДЛСТР(A4)-4)&ПРАВСИМВ(A4;4)+1000
- Преобразуйте текст, полученный на предыдущем шаге в дату =ДАТАЗНАЧ(ЛЕВСИМВ(A4;ДЛСТР(A4)-4)&ПРАВСИМВ(A4;4)+1000)
Теперь необходимо избирательно использовать, либо фрагмент с ДАТАМЕС, либо фрагмент с ДАТАЗНАЧ, в зависимости от того, как Excel воспринимает содержимое ячейки: как дату, или как текст. Если кратко, то формула в С4: =ЕСЛИ(ЕТЕКСТ(А4);ДАТАЗНАЧ();ДАТАМЕС()). Полностью формула: =ЕСЛИ(ЕТЕКСТ(A4);ДАТАЗНАЧ(ЛЕВСИМВ(A4;ДЛСТР(A4)-4)&ПРАВСИМВ(A4;4)+1000); ДАТАМЕС(A4;12000)). Скопируйте ее в ячейку D4, чтобы получить измененную дату для столбца В. Теперь вы можете использовать эти результаты с любой функцией даты. Например, в Е4 с помощью формулы =D4-C4 вы просто определите разность между конечной и начальной датой в днях. А в F4 с помощью формулы =РАЗНДАТ(C4;D4;»y») разность D4-C4 в полных годах. В ячейке G4 формулы из С4, D4 и Е4 объединены в одну мегаформулу: =ЕСЛИ(ЕТЕКСТ(B4);ДАТАЗНАЧ(ЛЕВСИМВ(B4;ДЛСТР(B4)-4)&ПРАВСИМВ(B4;4)+1000);ДАТАМЕС(B4;12000))-ЕСЛИ(ЕТЕКСТ(A4);ДАТАЗНАЧ(ЛЕВСИМВ (A4;ДЛСТР(A4)-4)&ПРАВСИМВ(A4;4)+1000);ДАТАМЕС(A4;12000))
Не забудьте, что в Англии и колониях переход с юлианского на григорианский календарь привел к тому, что вслед за 2 сентября 1752 года наступило сразу 14 сентября. В России вслед за 31 января 1918 года наступило 14 февраля (подробнее см. Григорианский календарь). Предложенная формула не обрабатывает эти аномалии.
Резюме: несмотря на то, что Excel не умеет напрямую работать с датами до 1900 года, вы можете добавить ко всем датам некое фиксированное число лет (например, 1000), и сделать доступным обработку формулами дат.
Источник. Эта формула была предложена Барри Гудини.
Источник
Как Excel хранит дату и время
history 8 апреля 2013 г.
В EXCEL дате соответствует целое положительное число, а времени суток — дробная часть числа.
Датам от 01.01.1900 до 31.12.9999 в EXCEL сопоставлены целые положительные числа от 1 до 2958466. Например, дате 25.01.1900 соответствует число 25. Отсюда следует, что одним суткам соответствует число 1.
Времени суток соответствует дробная часть числа. Так как одним суткам соответствует число 1, а 1 час – это 1/24 суток, 1 минута – 1/24/60, 1 сек – 1/24/60/60, то, например, число 0,5 тождественно 12:00. Времени 2:35:20 ( 2 часа 35 минут 20 секунд) соответствует число 0,10787 ( 2 *1/24+ 35 *1/24/60+ 20 *1/24/60/60).
Для отображения времени и даты в EXCEL существуют одноименные форматы ( Главная/ Число/ Формат ячеек ). Например, 14.01.2011 можно отобразить как 14-мар-2011 или как 2001-март.
Пример
Дате 14.01.2011 соответствует число 40557. Введем в ячейку 40557. Прибавим к 40557, например, 0,75 и применим к ячейке формат ДД.ММ.ГГ ч:мм;@ получим 14.01.11 18:00 , т.к. 0,75 соответствует 3/4 суток, т.е. 6 часов вечера.
Если встроенных форматов не достаточно, то можно настроить пользовательский формат (см. статью Пользовательский формат Даты и Времени ).
СОВЕТ: Если необходимо работать с датами до 01.01.1900 — прочитайте статью Вычисление с датами до 01.01.1900 .
Источник