Найти тему
VBA Excel с нуля

VBA Excel № 72.1 Работа с датами. Расширенные функции в VBA.

Оглавление
Скриншот с моего ноутбука
Скриншот с моего ноутбука

Не секрет, что пользователи программы 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

Перебор сокращенных названий дней недели:

Аналогично цикл проходит по сокращенным названиям дней недели (вс, пн и т.д.) и заменяет их на пустые строки в строке Временный.

УдалитьДату = Временный

Возвращение строки без дня недели:

Функция возвращает измененную строку без информации о дне недели.

Таким образом, функция УдалитьДату полезна при подготовке данных перед их дальнейшим анализом, когда требуется удалить информацию о дне недели из строк с датами.

Таким образом, функция УдалитьДату полезна при подготовке данных перед их дальнейшим анализом, когда требуется удалить информацию о дне недели из строк с датами.

Пока у нас в модуле две функции. В следующих двух статьях будем разбирать остальные функции и добавлять их в этот же модуль.

📌 Скачать файл пример, можно в статье №72.3.