Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Сколько раз в определенное число месяца встречается определенный день недели?
 
Прошу помощи в следующем вопросе. Необходимо понимание за определенный промежуток лет сколько раз в определенное число месяца встречается определенный день недели, наглядно в файле во вложении. P.S. увереннее ориентируюсь в формулах, с макросами пока не дружу.
Заранее спасибо!
 
Проверьте, пожалуйста, то ли это, что Вам требуется
Код
=СУММПРОИЗВ((ЗНАЧЕН(ТЕКСТ($G$1-1+СТРОКА(ДВССЫЛ("A1:A"&($G$2-$G$1)));"ДД"))=$A4)*(ТЕКСТ($G$1-1+СТРОКА(ДВССЫЛ("A1:A"&($G$2-$G$1)));"ДДД")=B$3)*1)
 
длиннее, но не летуче и циклы поменьше и считает быстрее.
=SUM(
(WEEKDAY(DATE(YEAR($G$1)+ROW($A$1:INDEX($A:$A;YEAR($G$2)-YEAR($G$1)+1))-1;TRANSPOSE(ROW($A$1:$A$12));$A4);2)=COLUMN()-1)*
(DATE(YEAR($G$1)+ROW($A$1:INDEX($A:$A;YEAR($G$2)-YEAR($G$1)+1))-1;TRANSPOSE(ROW($A$1:$A$12));$A4)>=$G$1)*
(DATE(YEAR($G$1)+ROW($A$1:INDEX($A:$A;YEAR($G$2)-YEAR($G$1)+1))-1;TRANSPOSE(ROW($A$1:$A$12));$A4)<=$G$2)
)

Изменено: БМВ - 30 Мар 2018 15:38:38
 
вот чисто интересно где применяется данная информация что за период будет 38 понедельников первого числа
Лень двигатель прогресса, доказано!!!
 
Применение следующее, хочу передвинуть дату уплаты ипотеки на такую дату, чтобы в течении всего срока эта дата наименьшее количество раз выпадала на выходные дни.
 
arm88den, измените логин по замечанию модератора и получите еще два варианта решения от БМВ, и мой
Лень двигатель прогресса, доказано!!!
 
вариант конечно задумчивая но рабочая
Код
=СУММ(СУММЕСЛИ(B$3;ДЕНЬНЕД(ЕСЛИ(ДЕНЬ(СТРОКА(ДВССЫЛ($G$1&":"&$G$2)))=$A5;СТРОКА(ДВССЫЛ($G$1&":"&$G$2));"Ъ");2)))/B$3
Лень двигатель прогресса, доказано!!!
 
Сергей,  да, это как раз пример когда коротко <> быстро. + летуче, как и в #3
 
БМВ, да я ни куда не тороплюсь  :D  
Лень двигатель прогресса, доказано!!!
 
Сергей, до 39го года полно времени :-)
 
Для полноты темы. UDF. В файле с формулой от  Сергей, для сравнения результатов
Код
Function СЧЁТДЕНЬНЕД(dt1 As Date, dt2 As Date, nd&, wd&)
If nd >= 1 And nd <= 31 Then
    For I = dt1 To dt2
        If Day(I) = nd Then
            If Weekday(I, vbMonday) = wd Then
                СЧЁТДЕНЬНЕД = СЧЁТДЕНЬНЕД + 1
            End If
        End If
    Next
End If
End Function
Согласие есть продукт при полном непротивлении сторон.
 
прикольно смотреть когда вычисляет до 3000 года УДФка просчитывает как то по диагонали а формула потом начинает тыкать в разных местах вычисления
Лень двигатель прогресса, доказано!!!
 
Ну еще можно сделать табличку-календарь и по ней построить сводную))
 

Цитата
Сергей написал:
прикольно смотреть когда вычисляет до 3000 года
не смог оценить, мое творение считает 3 сек :-p :-)

 
можно и без валотильных
Код
=СУММ(СУММЕСЛИ(B$3;ДЕНЬНЕД(ЕСЛИ(ДЕНЬ(СТРОКА(ИНДЕКС($A:$A;$G$1):ИНДЕКС($A:$A;$G$2)))=$A5;СТРОКА(ИНДЕКС($A:$A;$G$1):ИНДЕКС($A:$A;$G$2));"Ъ");2)))/B$3
Лень двигатель прогресса, доказано!!!
 
БМВ, в принципе исходя из задачи о которой я спросил выше это не важно, а ты хитрец решение разместил еще выше , мы до 3000 не доживем хотя у меня супруга ждет таблетку бессмертия и красоты сказала пока не изобретут умирать не собирается и мне половинку обещала :D  
Изменено: Сергей - 30 Мар 2018 19:49:33
Лень двигатель прогресса, доказано!!!
 
Сергей, Это понятно, разница только в переборе тысяч дней в сравнении с сотнями месяцев по каждой ячейке. В этом и разница в скорости. Летучесть только заставляет пересчитываться каждый раз.
Страницы: 1
Читают тему (гостей: 1)