Будни в Excel VBA
Ниже мы рассмотрим программу в Excel VBA, которая вычисляет количество будних дней между двумя датами.
Будни: понедельник, вторник, среда, четверг и пятница.
Ситуация:
Примечание: Даты в формате США. Месяцы первые, дни Второй. Этот тип формата зависит от ваших окон региональных настроек.
-
Во-первых, мы объявляем пять переменных. date1 типа Дата, date2 типа Date, dateToCheck типа Date, daysBetween типа Integer, будни типа Integer и я типа Integer.
Dim date1 As Date, date2 As Date, dateToCheck As Date Dim daysBetween As Integer, weekdays As Integer, i As Integer
-
Мы инициализируем четыре переменные. Мы используем функцию DateDiff для инициализации переменной daysBetween. Эта функция имеет три аргумента.
Наливаем в «г» для первого аргумента, так как мы хотим, чтобы количество дней между date1 и date2.
weekdays = 0 date1 = Range("B2") date2 = Range("B3") daysBetween = DateDiff("d", date1, date2)
-
Мы должны проверить на каждую дату между date1 и date2 (включая date1 и date2) дата, является ли будний день или нет. Если да, то мы увеличиваем будни на 1. Мы будем использовать для следующего цикла.
For i = 0 To daysBetween
-
Мы используем функцию DateAdd, чтобы получить каждую дату, мы должны проверить. Эта функция имеет три аргумента. Наливаем в «г» для первого аргумента, так как мы хотим, чтобы добавить дни, я для второго аргумента, и date1 для третьего аргумента, так как мы хотим, чтобы добавить I дней date1. Таким образом, Excel VBA можно проверить каждую дату между date1 и date2 начиная с date1. Добавьте следующую строку кода:
dateToCheck = DateAdd("d", i, date1)
Пример: при г = 3, Excel VBA чеки date1 + 3 дня.
-
Далее, мы используем функцию Будней (сборки в функции), чтобы проверить, является ли dateToCheck буднего дня или нет. Функция Будней возвращает 1 для воскресенья и 7 для субботы. Таким образом, мы только увеличиваем переменные будни, если Будни (dateToCheck) не равны 1, а не равно 7 (<> означает не равно). Следующие строки кода получить работу.
If (Weekday(dateToCheck) <> 1 And Weekday(dateToCheck) <> 7) Then weekdays = weekdays + 1 End If
-
Не забудьте закрыть петлю.
Next i
-
И, наконец, мы выводим число будней с помощью MsgBox. Мы используем и оператор для конкатенации (объединение) двух строк. Хотя рабочие дни не является строкой она работает здесь.
MsgBox weekdays & " weekdays between these two dates"
-
Поместите макрос в командной кнопке и протестировать его.
Результат: