Не секрет, что пользователи программы Excel сталкиваются с ограничениями при работе с датами до 1900 года. Особенно это актуально для специалистов по генеалогии, которые используют Excel для отслеживания дат рождения и смерти, включая те, которые предшествуют 1900 году. В подобных случаях вычисление прожитых лет становится проблематичным.
Однако существует набор ПОЛЬЗОВАТЕЛЬСКИХ функций, которые позволяют работать с широким диапазоном дат. Начиная с 1 января 100 года, VBA способен распознавать даты, предоставляя пользователям возможность более гибко управлять информацией.
При использовании этих функций необходимо учитывать изменения в календарях и быть осторожными при обработке дат до 1752 года, так как различия между григорианским и юлианским календарями могут привести к некорректным результатам вычислений.
Вот краткий обзор основных функций:
- АДАТА(y, m, d, формат): Возвращает дату, построенную на основе введенных года, месяца и дня, с возможностью указания формата.
- УдалитьДату(адата1): удаляет день недели.
- АДАТАДНЕЙПЛЮС(адата1, days, формат): Добавляет указанное количество дней к заданной дате, с возможностью указания формата.
- АДАТАДНЕЙМЕЖДУ(адата1, адата2): Возвращает количество дней между двумя датами.
- АДАТАЛЕТМЕЖДУ(адата1, адата2): Возвращает количество полных лет между двумя датами, полезно для вычисления возраста.
- АДАТАГОД(адата1): Возвращает год заданной даты.
- АДАТАМЕСЯЦ(адата1): Возвращает месяц заданной даты.
- АДАТАДЕНЬ(адата1): Возвращает день заданной даты.
- АДАТАДЕНЬНЕДЕЛИ(адата1): Возвращает день недели даты в виде целого числа от 1 до 7.
Некоторые из описанных функций показаны на скриншоте, расположенном ниже.
Важно помнить, что значения, возвращаемые этими функциями, представляют собой текстовые строки, а не реальные даты. Это ограничивает возможность выполнения математических операций с использованием стандартных операторов Excel. Однако эти значения могут быть использованы в качестве аргументов для других функций, предназначенных для работы с датами.
АДАТА
Приведенный ниже пример кода для функции АДАТА демонстрирует ее использование:
А теперь рассмотрим параметры функции "АДАТА":
- Параметр "y" представляет собой год, состоящий из четырех цифр и находящийся в диапазоне от 0100 до 9999.
- Параметр "m" обозначает номер месяца и может принимать значения от 1 до 12.
- Параметр "d" представляет номер дня и может принимать значения от 1 до 31.
- Параметр "формат" является необязательным и представляет собой строку форматирования даты. Если этот параметр не указан, дата будет отображаться в формате короткой даты, установленном в системе (на панели управления Windows).
Если значение параметра "m" или "d" превышает допустимый диапазон, происходит автоматический переход к следующему году или месяцу. Например, если указан месяц с номером 13, он будет интерпретироваться как январь будущего года.
Эти параметры обеспечивают гибкость и контроль при вводе данных, позволяя пользователям точно определить дату и формат отображения в зависимости от их потребностей. Пример использования функции АДАТА:
Коротко о форматах.
Ниже приведены примеры некоторых строк формата даты, которые могут оказаться полезными. Необходимо, чтобы вы заключили строку формата даты в кавычки.
Для того, чтобы рассмотреть (разобрать) такие функции как: АДАТАДНЕЙПЛЮС, АДАТАДНЕЙМЕЖДУ, АДАТАЛЕТМЕЖДУ, АДАТАГОД, АДАТАМЕСЯЦ, АДАТАДЕНЬ и АДАТАДЕНЬНЕДЕЛИ, необходимо иметь дополнительную функцию «УдалитьДату(адата1)», основной целью которой, является удалении информации о дне недели из переданной строки с датой.
УдалитьДату
Рассмотрим шаги функции:
i - переменная, используемая в циклах для перебора дней недели.
Объявление переменных:
Временный - переменная, в которую временно сохраняется строка с датой.
Временный = адата1
Присвоение переменной "Временный" значения аргумента "адата1":
Значение аргумента адата1 сохраняется во временной переменной Временный.
For i = 0 To 6
Временный = Application.Substitute(Временный, Format(DateSerial(1900, 1, 0), "dddd"), "")
Next i
Перебор полных названий дней недели:
Цикл проходит по полным названиям дней недели (воскресенье, понедельник и т.д.) и заменяет их на пустые строки в строке Временный.
For i = 0 To 6
Временный = Application.Substitute(Временный, Format(DateSerial(1900, 1, 0), "ddd"), "")
Next i
Перебор сокращенных названий дней недели:
Аналогично цикл проходит по сокращенным названиям дней недели (вс, пн и т.д.) и заменяет их на пустые строки в строке Временный.
УдалитьДату = Временный
Возвращение строки без дня недели:
Функция возвращает измененную строку без информации о дне недели.
Таким образом, функция УдалитьДату полезна при подготовке данных перед их дальнейшим анализом, когда требуется удалить информацию о дне недели из строк с датами.
Таким образом, функция УдалитьДату полезна при подготовке данных перед их дальнейшим анализом, когда требуется удалить информацию о дне недели из строк с датами.
Пока у нас в модуле две функции. В следующих двух статьях будем разбирать остальные функции и добавлять их в этот же модуль.