Роберт любит работать над генеалогией. Иногда, когда он находит более старое кладбище, вместо даты рождения и смерти на могильной плите видна только одна дата и возраст. Например, «родился: 18 января 1801 года, умер 81 год, 11 месяцев, 17 дней» или «возраст: 93 года, 8 месяцев, 22 дня, умер 18 марта 1901 года». Роберт спрашивает, есть ли способ вычислить недостающую дату дня.

Есть способ сделать это, но он не предполагает использования обычных функций рабочего листа. В то время как Excel включает богатый набор функций рабочего листа, которые позволяют управлять датами, «базовой датой» Excel является 1 января 1901 года; это дата, с которой отсчитываются все даты. (Вы можете изменить базовую дату, но только на три года, до 1904 года. Эта возможность предоставляется для совместимости с Excel на Mac.) Это означает, что более старые даты, такие как те, которые вы найдете на кладбище для генеалогических целей, могут Не рассчитываются напрямую в Excel.

К счастью, у VBA нет этого ограничения. Это означает, что вы можете легко создать определяемую пользователем функцию (макрос), которая будет выполнять вычисления за вас. Начните с размещения начальной даты (даты рождения или смерти)

в ячейке B1. Затем в ячейках B2: B4 введите количество лет, месяцев и дней, на которые вы хотите изменить дату начала. Таким образом, если B1 содержит дату рождения, тогда ячейки B2: B4 должны быть положительными (вы хотите добавить их к дате начала). Если B1 содержит дату смерти, тогда B2: B4 должно быть отрицательным (вы хотите вычесть их из начальной даты).

Затем создайте этот макрос:

Function FindDate(Start As Date, iYrs As Integer, _   iMths As Integer, iDays As Integer)



Application.Volatile     Dim D As Date

D = DateAdd("yyyy", iYrs, Start)

D = DateAdd("m", iMths, D)

D = DateAdd("d", iDays, D)



FindDate = Format(D, "m/d/yyyy")

End Function

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

=FindDate(B1,B2,B3,B4)

Результатом функции является отформатированная дата, которая представляет собой дату начала, скорректированную на указанные вами годы, месяцы и дни. Таким образом, если ячейка B1 содержит 1/18/1801, ячейка B2 содержит 81, ячейка B3 содержит 11, а ячейка B4 содержит 17, тогда функция вернет 1/4/1883. Точно так же, если ячейка B1 содержит 18.03.1901, ячейка B2 содержит -93, ячейка B3 содержит -8, а ячейка B4 содержит -22, тогда возвращенным результатом будет 26.06.1807.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (5896) применим к Microsoft Excel 97, 2000, 2002 и 2003. Вы можете найти версию этого совета для ленточного интерфейса Excel (Excel 2007 и новее) здесь:

link: / excelribbon-Tombstone_Date_Math [Математика даты надгробия].