Ниже мы рассмотрим программу в Excel VBA, которая вычисляет количество будних дней между двумя датами.

Будни: понедельник, вторник, среда, четверг и пятница.

Ситуация:

Weekdays in Excel VBA

Примечание: Даты в формате США. Месяцы первые, дни Второй. Этот тип формата зависит от ваших окон региональных настроек.

  1. Во-первых, мы объявляем пять переменных. 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
  1. Мы инициализируем четыре переменные. Мы используем функцию DateDiff для инициализации переменной daysBetween. Эта функция имеет три аргумента.

Наливаем в «г» для первого аргумента, так как мы хотим, чтобы количество дней между date1 и date2.

weekdays = 0

date1 = Range("B2")

date2 = Range("B3")

daysBetween = DateDiff("d", date1, date2)
  1. Мы должны проверить на каждую дату между date1 и date2 (включая date1 и date2) дата, является ли будний день или нет. Если да, то мы увеличиваем будни на 1. Мы будем использовать для следующего цикла.

For i = 0 To daysBetween
  1. Мы используем функцию DateAdd, чтобы получить каждую дату, мы должны проверить. Эта функция имеет три аргумента. Наливаем в «г» для первого аргумента, так как мы хотим, чтобы добавить дни, я для второго аргумента, и date1 для третьего аргумента, так как мы хотим, чтобы добавить I дней date1. Таким образом, Excel VBA можно проверить каждую дату между date1 и date2 начиная с date1. Добавьте следующую строку кода:

dateToCheck = DateAdd("d", i, date1)

Пример: при г = 3, Excel VBA чеки date1 + 3 дня.

  1. Далее, мы используем функцию Будней (сборки в функции), чтобы проверить, является ли dateToCheck буднего дня или нет. Функция Будней возвращает 1 для воскресенья и 7 для субботы. Таким образом, мы только увеличиваем переменные будни, если Будни (dateToCheck) не равны 1, а не равно 7 (<> означает не равно). Следующие строки кода получить работу.

If (Weekday(dateToCheck) <> 1 And Weekday(dateToCheck) <> 7) Then

weekdays = weekdays + 1

End If
  1. Не забудьте закрыть петлю.

Next i
  1. И, наконец, мы выводим число будней с помощью MsgBox. Мы используем и оператор для конкатенации (объединение) двух строк. Хотя рабочие дни не является строкой она работает здесь.

MsgBox weekdays & " weekdays between these two dates"
  1. Поместите макрос в командной кнопке и протестировать его.

Результат:

Weekdays Result