Найти в Дзене
VBA Excel с нуля

VBA Excel № 42. Работа с датами в VBA.

Оглавление

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

1. Определение текущей даты и времени:

Чтобы получить текущую дату и время, вы можете использовать функцию «Now». Например, следующий код показывает текущую дату и время в окне сообщений:

MsgBox Now

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

2. Работа с отдельными компонентами даты:

В VBA вы можете получить доступ к отдельным компонентам даты, таким как год, месяц, день, часы, минуты и секунды, с помощью функций «Year», «Month», «Day», «Hour», «Minute» и «Second». Вот пример:

Dim myDate As Date

myDate = Now

MsgBox "Год: " & Year(myDate)

MsgBox "Месяц: " & Month(myDate)

MsgBox "День: " & Day(myDate)

MsgBox "Часы: " & Hour(myDate)

MsgBox "Минуты: " & Minute(myDate)

MsgBox "Секунды: " & Second(myDate)

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

Эти значения также выводятся с помощью функции "MsgBox" по очереди.

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

3. Работа с датами в различных форматах:

VBA позволяет отформатировать дату в различных форматах с помощью функции «Format». Например:

Dim myDate As Date

myDate = Now

MsgBox Format(myDate, "dd.mm.yyyy") ' Выводит дату в формате "дд.мм.гггг"

MsgBox Format(myDate, "mm/dd/yyyy") ' Выводит дату в формате "мм/дд/гггг"

MsgBox Format(myDate, "yyyy-mm-dd") ' Выводит дату в формате "гггг-мм-дд"

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

Эти значения также выводятся с помощью функции "MsgBox" по очереди.

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

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

4. Работа с датами в расчетах:

В VBA вы можете выполнять расчеты с датами, такие как сложение или вычитание определенного количества дней, месяцев или лет. Вот пример:

Dim startDate As Date

Dim endDate As Date

Dim duration As Long

startDate = #6/1/2023# ' Установка начальной даты

endDate = DateAdd("m", 3, startDate) ' Добавление 3 месяцев к начальной дате

duration = DateDiff("d", startDate, endDate)

' Разница в днях между начальной и конечной датами

MsgBox "Начальнаяя дата: " & startDate

MsgBox "Конечная дата: " & endDate

MsgBox "Продолжительность: " & duration & " дней"

Скриншот с моего ноутбука
Скриншот с моего ноутбука
функцию DateDiff используйте для определения количества указанных интервалов времени между двумя датами. Например, DateDiff можно использовать для вычисления числа дней между двумя датами или числа недель между сегодняшним днем и концом года и т.п.

В приведенном примере мы устанавливаем начальную дату («startDate») на 1 июня 2023 года. Затем мы используем функцию «DateAdd», чтобы добавить 3 месяца к начальной дате и сохранить результат в переменной «endDate». Затем мы используем функцию «DateDiff», чтобы вычислить разницу в днях между начальной и конечной датами и сохранить результат в переменной «duration». В конце мы выводим значения начальной даты, конечной даты и продолжительности в окне сообщений.

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

Внимание! Ошибка дат в Excel

В самом Excel имеется ошибка, связанная с датами. Так, в Excel 1900 год трактуется как високосный, хотя на самом деле он таковым не является.

Поэтому в Excel можно представить несуществующую дату 29 февраля 1900 года.

=ДАТА(1900;2;29). Введите эту формулу в ячейке и получите результат: 29.02.1900

B VBA подобная ошибка отсутствует. Эквивалентом функции Excel ДАТА () в VBA является функция DateSerial. Представленное ниже выражение (корректно) возвращает 1 марта 1900 года.

DateSerial (1900,2,29).

Следовательно, система представления дат в Excel не соответствует системе представления дат в VBA. Эти две системы возвращают различные значения для дат в диапазоне от 1 марта 1900 года до 31 декабря 1900 года (хотя для Вас это скорее всего никогда не пригодится).

Надеюсь, эта статья помогла вам понять основы работы с датами в VBA. Использование дат в программировании может быть очень полезным для обработки и манипулирования временными данными в ваших проектах.

На макросы я назначил кнопки

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

СКАЧАТЬ ФАЙЛ ПРИМЕР

В следующей статье рассмотрим операторы присваивания в VBA.