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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2009, 14:31   #1
nastyavvolf
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 13
По умолчанию Помогите с решением задачи на VBA

нужно чтобы проставляло количество дней в конкретном месяце интервала...
пожалуйста, помогите
nastyavvolf вне форума Ответить с цитированием
Старый 10.07.2009, 14:33   #2
nastyavvolf
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 13
По умолчанию

забыла файл вложить... вот
Вложения
Тип файла: rar 111.rar (15.2 Кб, 21 просмотров)
nastyavvolf вне форума Ответить с цитированием
Старый 10.07.2009, 14:42   #3
pivas
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 412
По умолчанию

Есть готовая функция "ДНЕЙ360" в разделе "Дата и время". Вычисляет кол-во дней между датами.
pivas вне форума Ответить с цитированием
Старый 10.07.2009, 15:30   #4
nastyavvolf
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 13
По умолчанию

про готовые функции знаю, но необходимо это выполнить именно на VBA...
nastyavvolf вне форума Ответить с цитированием
Старый 10.07.2009, 16:11   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
про готовые функции знаю, но необходимо это выполнить именно на VBA...
Вот Вы сначала придумайте формулы, а мы уже поможем Вам перевести их в макросы.

EducatedFool вне форума Ответить с цитированием
Старый 10.07.2009, 16:21   #6
nastyavvolf
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 13
По умолчанию

к примеру эта:
=ЕСЛИ(ИЛИ(("1."&C$4&"."&(ГОД($A5)+Е СЛИ(МЕСЯЦ($A5)>МЕСЯЦ("1."&C$4&ГОД($ A5));1;0)))*1>$B5*1;(("1."&МЕСЯЦ("1 ."&C$4&ГОД($A5))+ЕСЛИ(МЕСЯЦ("1."&C$ 4&ГОД($A5))=12;-11;1)&"."&(ГОД($A5)+ЕСЛИ(ИЛИ(МЕСЯЦ( $A5)>МЕСЯЦ("1."&C$4&ГОД($A5));МЕСЯЦ ("1."&C$4&"1")=12);1;0)))-1)*1<$A5*1);0;ЕСЛИ($B5*1<(("1."&МЕС ЯЦ("1."&C$4&ГОД($A5))+ЕСЛИ(МЕСЯЦ("1 ."&C$4&ГОД($A5))=12;-11;1)&"."&(ГОД($A5)+ЕСЛИ(ИЛИ(МЕСЯЦ( $A5)>МЕСЯЦ("1."&C$4&ГОД($A5));МЕСЯЦ ("1."&C$4&"1")=12);1;0)))-1)*1;$B5+1;(("1."&МЕСЯЦ("1."&C$4&ГО Д($A5))+ЕСЛИ(МЕСЯЦ("1."&C$4&ГОД($A5 ))=12;-11;1)&"."&(ГОД($A5)+ЕСЛИ(ИЛИ(МЕСЯЦ( $A5)>МЕСЯЦ("1."&C$4&ГОД($A5));МЕСЯЦ ("1."&C$4&"1")=12);1;0)))-1)+1)-ЕСЛИ($A5*1>("1."&C$4&"."&(ГОД($A5)+ ЕСЛИ(МЕСЯЦ($A5)>МЕСЯЦ("1."&C$4&ГОД( $A5));1;0)))*1;$A5;("1."&C$4&"."&(Г ОД($A5)+ЕСЛИ(МЕСЯЦ($A5)>МЕСЯЦ("1."& C$4&ГОД($A5));1;0)))))

©Шпец Докапыч

Последний раз редактировалось nastyavvolf; 10.07.2009 в 16:25.
nastyavvolf вне форума Ответить с цитированием
Старый 10.07.2009, 16:28   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
©Шпец Докапыч
Вот только он и сможет перевести эту формулу на VBA

Придумайте формулу попроще, пожалуйста.
Ну или подождите немного, пока её придумает кто-нибудь другой...
EducatedFool вне форума Ответить с цитированием
Старый 10.07.2009, 16:32   #8
nastyavvolf
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 13
По умолчанию

хм, ну тогда вот, тот же алгоритм только передаланный мной =)
=ЕСЛИ(ИЛИ(КОНМЕСЯЦА("1."&МЕСЯЦ("1." &C$4&"."&ГОД($A5))&"."&ГОД($A5)+ЕСЛ И(МЕСЯЦ("1."&C$4&"."&ГОД($A5))>9;0; 1);-1)+1>$B5*1;КОНМЕСЯЦА("1."&МЕСЯЦ("1. "&C$4&"."&ГОД($A5))&"."&ГОД($A5)+ЕС ЛИ(МЕСЯЦ("1."&C$4&"."&ГОД($A5))>9;0 ;1);0)<$A5*1);0;ЕСЛИ($B5*1<КОНМЕСЯЦ А("1."&МЕСЯЦ("1."&C$4&"."&ГОД($A5)) &"."&ГОД($A5)+ЕСЛИ(МЕСЯЦ("1."&C$4&" ."&ГОД($A5))>9;0;1);0);$B5+1;КОНМЕС ЯЦА("1."&МЕСЯЦ("1."&C$4&"."&ГОД($A5 ))&"."&ГОД($A5)+ЕСЛИ(МЕСЯЦ("1."&C$4 &"."&ГОД($A5))>9;0;1);0)+1)-ЕСЛИ($A5*1>КОНМЕСЯЦА("1."&МЕСЯЦ("1. "&C$4&"."&ГОД($A5))&"."&ГОД($A5)+ЕС ЛИ(МЕСЯЦ("1."&C$4&"."&ГОД($A5))>9;0 ;1);-1)+1;$A5;КОНМЕСЯЦА("1."&МЕСЯЦ("1."& C$4&"."&ГОД($A5))&"."&ГОД($A5)+ЕСЛИ (МЕСЯЦ("1."&C$4&"."&ГОД($A5))>9;0;1 );-1)+1))

Последний раз редактировалось nastyavvolf; 10.07.2009 в 16:35.
nastyavvolf вне форума Ответить с цитированием
Старый 10.07.2009, 16:33   #9
nastyavvolf
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 13
По умолчанию

алгоритм простой, только как это в VBA отразить я не знаю
nastyavvolf вне форума Ответить с цитированием
Старый 10.07.2009, 18:35   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

я чуть изменил исходные данные (строку с названиями месяцев, там теперь стоит дата - первый день соответствующего месяца), кстати вопрос к автору, из чего явствует, что написанный в колонке "С" октябрь относится к 2005 году, а не допустим к 2020? а январь уже к 2006? вопрос риторический, можно не отвечать.

Алгоритм приведенной ниже формулы довольно прост: выбираем минимальное значение из двух: конец данного месяца и конец рассматриваемого периода, назовем его МИ, выбираем максимальное значение из двух: начало месяца и начало периода, назовем его МА. Если МИ меньше МА, общих дней нет, иначе в этот месяц попало МИ-МА+1 дней из рассматриваемого периода.
Код:
=ЕСЛИ(МИН(КОНМЕСЯЦА(R4C;0);RC2)<МАКС(R4C;RC1);;МИН(КОНМЕСЯЦА(R4C;0);RC2)-МАКС(R4C;RC1)+1)
Вложения
Тип файла: rar книга118.rar (16.0 Кб, 16 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с решением задачи Ainur Помощь студентам 6 23.05.2009 11:42
Помогите с решением задачи. Ainur Помощь студентам 4 23.05.2009 11:26
Помогите с решением задачи! Anuta Общие вопросы Delphi 4 26.06.2008 20:26