Поиск ближайшего понедельника
С помощью несложного трюка можно быстро вычислить требуемый день недели по отношению к заданной дате (например, когда будет первый понедельник после 27.07.2005). В этом нам поможет функция dhGetNextMonday, код которой приведен в листинге 2.58.
Листинг 2.58. Ближайший день недели по отношению к дате
Function dhGetNextMonday(datDate As Date) As Date
' Определение даты следующего понедельника (функция Weekday _
возвращает номер дня недели, считая от понедельника, если _
в качестве второго аргумента задавать vbMonday)
If Weekday(datDate, vbMonday) = 1 Then
' Заданная дата и есть понедельник
dhGetNextMonday = datDate
Else
' Расчет даты следующего понедельника
dhGetNextMonday = datDate + 8 – Weekday(datDate,
vbMonday)
End If
End Function
Чтобы получить дату ближайшего понедельника, например, после 27.07.2005, необходимо в окне мастера функций выбрать функцию dhGetNextMonday и в качестве значения аргумента ввести 27.07.2005.
После нажатия Enter в активной ячейке отобразится дата 01.08.2005, то есть ближайший понедельник после 27 июля 2005 года приходится на 1 августа 2005 года. Если воспользоваться строкой формул, то формула будет выглядеть так:
=dhGetNextMonday(«27.07.2005»)
Аналогичным образом можно вычислить даты остальных дней недели.
Если после применения формулы дата не отображается надлежащим образом (например, 3 8545 вместо 12.07.2005), то необходимо установить формат ячейки Дата.