Страницы: 1
RSS
Подсчет рабочих дней в собственном календаре
 
Есть созданный самостоятельно календарь, где прописаны именн те рабочие дни, которые реально есть в отделе.  
 
Не могу сообразить формулу для подсчета кол-ва рабочих дней в заданном интервале от одной даты до другой.  
 
Файл прилагаю, прошу помочь...
 
Формула массива:  
 
=СЧЁТ(ПОИСК("рабочий";ИНДЕКС($B$9:$M$39;ПОИСКПОЗ(ДЕНЬ($C$1);$A$9:$A$39;0);ПОИСКПОЗ(МЕСЯЦ($C$1);МЕСЯЦ($B$5:$M$5);0)):ИНДЕКС($B$9:$M$39;ПОИСКПОЗ(ДЕНЬ($C$2);$A$9:$A$39;0);ПОИСКПОЗ(МЕСЯЦ($C$2);МЕСЯЦ($B$5:$M$5);0))))
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
=СУММПРОИЗВ((B5:M5+A9:A39-1<=C2)*(B5:M5+A9:A39-1>=C1)*(B9:M39="рабочий"))
 
Спасибо, огромное, эта формула конечно проще, чем у Валадимира. + считает вернее когда интервал не врамках одного месяца
 
Поставьте диапазон с 01.01.2012 по 20.03.2012 и посчитайте внимательно, где неправильно считает.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
ПО вашему в этом диапазоне у меня выдает 36 рабочих, что не верно, а у KIMa 49, что верно... Моежет не так формулу копирую, хотя врядли...
 
Макросом  
 
Option Explicit  
 
Private Sub WorkDays()  
Dim FirstDate As Date  
Dim EndDate As Date  
Dim iFirstRow As Long  
Dim iFirstCol As Long  
Dim iEndRow As Long  
Dim iEndCol As Long  
 
FirstDate = Range("C1")  
EndDate = Range("C2")  
iFirstRow = Columns("A").Find(Day(FirstDate), , xlFormulas, xlWhole).Row  
iEndRow = Columns("A").Find(Day(EndDate), , xlFormulas, xlWhole).Row  
iFirstCol = Rows(5).Find(DateSerial(Year(FirstDate), Month(FirstDate), 1), , xlFormulas, xlWhole).Column  
iEndCol = Rows(5).Find(DateSerial(Year(EndDate), Month(EndDate), 1), , xlFormulas, xlWhole).Column  
 
Range("B3").ClearContents  
If iFirstCol = iEndCol Then  
Range("B3") = WorksheetFunction.CountIf(Range(Cells(iFirstRow, iFirstCol), Cells(iEndRow, iEndCol)), "рабочий")  
Else  
If iFirstCol = iEndCol - 1 Then  
Range("B3") = WorksheetFunction.CountIf(Range(Cells(iFirstRow, iFirstCol), Cells(39, iFirstCol)), "рабочий") _  
+ WorksheetFunction.CountIf(Range(Cells(9, iEndCol), Cells(iEndRow, iEndCol)), "рабочий")  
Else  
Range("B3") = WorksheetFunction.CountIf(Range(Cells(iFirstRow, iFirstCol), Cells(39, iFirstCol)), "рабочий") _  
+ WorksheetFunction.Sum(Range(Cells(7, iFirstCol + 1), Cells(7, iEndCol - 1))) _  
+ WorksheetFunction.CountIf(Range(Cells(9, iEndCol), Cells(iEndRow, iEndCol)), "рабочий")  
End If  
End If  
End Sub
 
{quote}{login=}{date=26.04.2012 11:07}{thema=}{post}ПО вашему в этом диапазоне у меня выдает 36 рабочих, что не верно, а у KIMa 49, что верно... Моежет не так формулу копирую, хотя врядли...{/post}{/quote}  
 
Да, именно 36 и должно быть, а не 49.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
У меня в период с 01.01.2012 по 20.03.2012  
получилось 49 рабочих дней
 
К чему слова, когда в примере всё ясно и понятно.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Мне, например, непонятно.  
Если вы считаете только желтые ячейки,  
то куда девать рабочие дни после 21 января по 31  
и 21 февраля по 29.  
В январе 16 рабочих дней,  
в феврале 20 рабочих дней  
и с 1 марта по 20 еще 13 рабочих дней,  
итого 49 рабочих дней
 
Точно. Теперь понял, что не так.  
 
---------  
88484
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
А что все таки поменять, что бы формула верно считала?
 
А формула Kim_а не устроила? Хорошо, я подумаю над своей, если есть интерес. Только пока занят.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
Страницы: 1
Читают тему
Наверх