Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Как из года, номера недели и дня в неделе получить дату?
 
Добрый вечер. Вновь обращаюсь к вам за помощью.
Имеются три значения: год, номер недели в этом году и день недели в ней. Нужно в итоге получить конкретную дату по этим значениям. Недели в году и дни в неделе - по ИСО (1-я неделя - с четвергом; 1-й день - понедельник, 7-й - воскресенье)
Желательно в виде формулы.
 
Цитата
Инсайд83 написал: Вновь обращаюсь к вам за помощью.
Обращайтесь - Правила, Приемы, Поиск... ;)
Они вам дадут 1 из 1001 - http://www.planetaexcel.ru/techniques/6/75/
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Z, Спасибо, конечно, за отклик. Но дело в том, что мне не известен месяц - только номер недели. Но за наводку спасибо еще раз. Буду думать.
 
вот попробовал для 15 года
 
Код
=ДАТА(R1C[-2];1;1)+ (ДЕНЬНЕД(ДАТА(R1C[-2];1;1);2)>4)*7-ДЕНЬНЕД(ДАТА(R1C[-2];1;1);2)+(R[-1]C[-2]-1)*7+R[-1]C[-1]
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Vik_tor, по Вашему примеру неудачно считает год, где 1 января выпадает на пятницу-воскресенье. Все равно спасибо Вам.

[USER=8380]Ігор Гончаренко[/USER, то, что нужно! Спасибо огромное!
Изменено: Инсайд83 - 2 Мар 2017 23:10:32
 
Еще вариант, вроде покороче немного. Сверял по календарю от Ron de Bruin, в котором есть номера недель по разным системам. Помогал его русифицировать, кстати :)
Изменено: ZVI - 2 Мар 2017 19:46:45
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
 
Кнопка цитирования не для ответа [МОДЕРАТОР]

Спасибо и Вам! Тоже подходит!
 
Владимир,
Вы б математикой этого метода поделились! Если предыдущие прозрачны, то этот заставляет задуматься.
 
Инсайд83, кнопка цитирования не для ответа! Зачем целиком сообщение цитируете?  
 
Цитата
БМВ написал: Вы б математикой этого метода поделились!
Попробую объяснить. Исходим из того, что 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
Изменено: ZVI - 3 Мар 2017 01:48:57
Vladimir Zakharov
Microsoft MVP – Office Apps & Services
 
Можно еще такие формулы применить:
=ДАТА(A2;1;B2*7+C2-4)-ОСТАТ(ДАТА(A2;1;2);7)
=ОКРУГЛТ(ДАТА(A2;;23);7)+B2*7+C2+1
=ОТБР(ДАТА(A2;;26)/7+B2;)*7+C2+1
Алгоритм тот же, что и у Владимира, только немного короче
Изменено: MCH - 3 Мар 2017 08:07:06
Страницы: 1
Читают тему (гостей: 1)
Наверх