Страница: 1 |
Страница: 1 |
Вопрос: Как определить кол-во субботних дней в текущем мес
Добавлено: 10.10.06 15:40
Автор вопроса: macho
Как с помощью средств ВБА подсчитать
1. кол-во суббот в месяце?
2. выхоных дней: (суббота + воскрксенье)?
или рабочих дней (с исключением субботы и воскресенья)?
Я такой функции в ВБА не нашел.
С уважением macho
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #1
Добавлено: 10.10.06 16:48
А может тебе функцию, которая будет кофе приносить? А по выходным еще и пиво?
Это делается ручками:
Есть такая функция WeekDay(Date), которая возвращает число от 0 до 6 - день недели. По умолчанию 0 - это воскресенье (у американцев с него начинается новая неделя), но у функции есть параметр, который може задать и другое значение.
Берешь переменную типа Date (например Dat), присваиваешь ей значение начала месяца (скажем 01.10.2006) и начинаешь прибавлять по 1 (Dat = Dat + 1). Делаешь это в цикле While-wend, проверяя в качестве условия смену номера месяца (month(Dat)). Если номер месяца поменялся, то начался новый месяц и подсчет окончен.
Сам подсчет: проверяешь номер дня недели WeekDay(Dat), если он 0 - воскресенье, 6 - суббота (по умолчанию).
Все.
Номер ответа: 2
Автор ответа:
Дмит
Вопросов: 11
Ответов: 160
Web-сайт:
Профиль | | #2
Добавлено: 10.10.06 17:01
Или мегаформулой
{=СУММ((ДЕНЬНЕД(ДАТА(ГОД(A1);МЕСЯЦ(A1);СТРОКА(ДВССЫЛ("1:"&ДЕНЬ(ДАТА(ГОД(A1);МЕСЯЦ(A1)+1;0))))))=B1)*1)}
Не забудь в А1 - дата твоего месяца, В1 - день недели (0 - воскресенье).
Номер ответа: 3
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #3
Добавлено: 10.10.06 17:19
2 Дмит:
Но это же для Excel, а не для VBA! Не сбивай товарисча с пути истинного, пусть учится работать на VB головой, а не тырить функции у Excelov.
Номер ответа: 4
Автор ответа:
_ICE_
ICQ: 354-671-214
Вопросов: 18
Ответов: 103
Профиль | | #4
Добавлено: 10.10.06 18:33
Вот тебе готовая функция для этого дела. Она считает выходные (субботы + воскресенья).
Немного воображения и соображения и ее можно заставить считать раздельно то и другое.
Function VichodnCount(ByVal MonthNumber)
 im Dat As Date
 im MStr As String
If MonthNumber < 10 Then
MStr = "0" & CStr(MonthNumber)
Else
MStr = CStr(MonthNumber)
End If
 at = "01." & MStr & "." & CStr(Year(Date))
While Month(Dat) = MonthNumber
If Weekday(Dat, vbMonday) = 6 Then
VichodnCount = VichodnCount + 1
ElseIf Weekday(Dat, vbMonday) = 7 Then
VichodnCount = VichodnCount + 1
End If
 at = Dat + 1
Wend
End Function
Вот пример использования функции:
Sub Test()
MsgBox VichodnCount(10)
End Sub
Номер ответа: 5
Автор ответа:
macho
Вопросов: 11
Ответов: 19
Профиль | | #5
Добавлено: 10.10.06 23:43
Большое спасибо. Все понял.
Кофе не употребляю, а пиво - с удовольствием!
Желаю всем успехов.
Номер ответа: 6
Автор ответа:
Андрей
ICQ: 223068450
Вопросов: 0
Ответов: 3
Профиль | | #6
Добавлено: 18.10.06 02:02
Да это нечестно надо и голововой покрутить