Страницы: 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.03.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.03.2018 19:49:33
Лень двигатель прогресса, доказано!!!
 
Сергей, Это понятно, разница только в переборе тысяч дней в сравнении с сотнями месяцев по каждой ячейке. В этом и разница в скорости. Летучесть только заставляет пересчитываться каждый раз.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх