Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2010, 14:31   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Определение количества указанных дней в любом месяце

Цитата с книги:

Хотя в Excel много функций даты и времени, на данный момент не существует функции, которая, например, сказала бы, сколько понедельников будет в январе 2005 года. Чтобы узнать это, можно использовать много функций даты и времени Excel с глубокой вложенностью, но, к сожалению, как можно представить, это будет весьма громоздкий и неуклюжий процесс.
VBA поможет упростить сложную задачу. Вместо того чтобы нащупывать нужную комбинацию сложных функций, можно написать пользовательскую функцию, которая будет выполнять ту же задачу, и все, что нужно сделать, — ввести день и дату, для которой нужно выполнить функцию.
Для определения количества дней в определенном месяце можно воспользоваться следующей функцией. Например:
=HowManyDaysInMonth("l/12/03"."wed") - вот тут точно ошибка, но где?
Чтобы использовать эту пользовательскую функцию в рабочей книге, сначала необходимо поместить следующий код в стандартный модуль.
Код:
Function HowManyDaysInMonth(FullDate As String, sDay As String) As Integer
Dim i As Integer
Dim iDay As Integer, iMatchDay As Integer
Dim iDaysInMonth As Integer
Dim FullDateNew As Date
iMatchDay = Weekday(FullDate)
Select Case UCase(sDay)
Case "SUN"
iDay = 1
Case "MON"
iDay = 2
Case "TUE"
iDay = 3
Case "WED"
iDay 4
Case "THU"
iDay = 5
Case "FRI"
iDay = 6
Case "SAT"
iDay = 7
End Select
iDaysInMonth = Day(DateAdd("d", -1, DateSerial _
(Year(FullDate).Month(FullDate) + 1, 1)))
FullDateNew = DateSerial(Year(FullDate).Month(FullDate).iDayslnMonth)
For i = iDaysInMonth - 1 To 0 Step -1
If Weekday(FullOateNew - i) = iDay Then
HowManyDaysInMon: h = HowManyDaysInMontt + 1
End If
Next i
End Function
И здесь, наверное то же ошибка?
valerij вне форума Ответить с цитированием
Старый 25.06.2010, 14:38   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
И здесь, наверное то же ошибка?
Конечно.
В коде есть несколько синтаксических ошибок,
кроме того, отсутствует обработка ошибок ввода.

Наверняка эту функцию можно заменить формулой массива, которая будет работать ничуть не хуже...
EducatedFool вне форума Ответить с цитированием
Старый 25.06.2010, 14:48   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Вот как будет правильно и коротко:
Код:
Public Enum WEEKDAY
    Понедельник = 1: Вторник = 2: Среда = 3
    Четверг = 4: Пятница = 5: Суббота = 6: Воскресенье = 7
End Enum

Function WeekDaysInMonth(ByVal FullDate As Date, iDay As WEEKDAY) As Integer
    For i = FullDate - 40 To FullDate + 40
        If Month(i) = Month(FullDate) Then WeekDaysInMonth = WeekDaysInMonth - (Application.WEEKDAY(i, 2) = iDay)
    Next i
End Function

Sub ПримерИспользования()
    MsgBox WeekDaysInMonth("21-06-2010", Четверг)
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 25.06.2010, 15:46   #4
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вот как будет правильно и коротко:
Спасибо!!!!
Ну, что за книги.....
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить день недели по заданному числу (считать в месяце 30 дней и первый день месяца понедельник dan1991 Помощь студентам 1 01.03.2009 20:59
Количество дней в месяце по диапазону дат VadimSh Microsoft Office Excel 6 26.11.2008 23:48
...дней в месяце Altera Общие вопросы Delphi 1 18.11.2008 06:44
число дней в месяце конкретного года (Excel) Andrew_R Microsoft Office Excel 2 28.10.2007 21:22
определение кол-ва дней в месяце apelsin Общие вопросы Delphi 3 15.02.2007 07:21