Цитата |
---|
БМВ написал: Вы б математикой этого метода поделились! |
Попробую объяснить. Исходим из того, что 1-я неделя - это неделя в начале января с четвергом.
Это означает, что 1-й понедельник этой недели всегда в интервале от 29 декабря по 4 января.
Наша формула такая:
=ДАТА(A2;1;-2)-ДЕНЬНЕД(ДАТА(A2;1;3))+B2*7+C2-1, алгоритм следующий:
1. Найти дату понедельника "нулевой" недели, от которой начнем отсчет недель:
=ДАТА(Год;1;-2)-ДЕНЬНЕД(ДАТА(Год;1;3)) , где Год = значение ячейки A2
Если к этой дате прибавить 7 дней, то получим понедельник первой недели по ГОСТ ИСО или по функции НОМНЕДЕЛИ.ISO
Функция ДЕНЬНЕД здесь используется без второго аргумента и выдает 2 для понедельника.
Для привычной для нас логики (неделя – с понедельника) можно было бы использовать такой вариант:
=ДАТА(Год;1;-2)-ДЕНЬНЕД(ДАТА(Год;1;4);2), но в исходной формуле без 2-го аргумента формула покороче и число 3 используется вместо 4 с тем же результатом. Теперь разберемся, откуда взялось -2.
Понедельник 1-й недели (он перед 5 января текущего года) можно вычислить так:
=ДАТА(Год;1;5)-ДЕНЬНЕД(ДАТА(Год;1;3))Этот понедельник может оказаться как в текущем году, так и в предыдущем.
Но нас интересует понедельник "нулевой" недели для начала отсчета, поэтому нужно из 5 января вычесть еще 7 дней, отсюда и получается -2:
=ДАТА(Год;1;5-7)-ДЕНЬНЕД(ДАТА(Год;1;3))Исходная формула для расчета даты понедельника "нулевой" недели в привычном для нас виде могла бы выглядеть так:
=ДАТА(Год;1;5-7)-ДЕНЬНЕД(ДАТА(Год;1;4);2)2. Найти понедельник текущей недели уже несложно:
+ НомерНедели * 7 , где НомерНедели = значение ячейки B2
3. Учесть еще и день недели (1 для понедельника и т.п.) тоже просто:
+ ДеньНедели - 1 , где ДеньНедели = значение ячейки C2
Если плясать не от "нулевого", а от первого понедельника, то формула выглядела бы понятнее, но и подлиннее:
=ДАТА(Год;1;5)-ДЕНЬНЕД(ДАТА(Год;1;4);2)+(НомерНедели-1)*7+ДеньНедели-1применительно к примеру:
=ДАТА(A2;1;5)-ДЕНЬНЕД(ДАТА(A2;1;4);2)+(B2-1)*7+C2-1