Есть ли способ получить номер недели по заданной дате или извлечь диапазон дат из определенного номера недели и года в Excel? Для решения этой задачи вам могут помочь следующие формулы.
Преобразование номера недели в дату с помощью формул
Преобразование даты в номер недели с помощью формул
Преобразование номера недели в дату с помощью формул
Предположим, у меня есть случайный номер года и недели, которые равны 2015 и 15 на листе, как показано на следующем снимке экрана, и теперь я хочу узнать конкретные даты с понедельника по воскресенье по этому заданному номеру недели.
Чтобы рассчитать диапазон дат по конкретному номеру недели, вы можете использовать следующие формулы:
1. Выберите пустую ячейку, вы вернете дату начала (в нашем случае мы выбираем ячейку B5), введите формулу: =MAX(DATE(B1,1,1),DATE(B1,1,1)-WEEKDAY(DATE(B1,1,1),2)+(B2-1)*7+1), и нажмите Enter ключ. Смотрите скриншот ниже:
2. Выберите другую пустую ячейку, вы вернете дату окончания (в нашем случае мы выбираем ячейку B6), введите =MIN(DATE(B1+1,1,0),DATE(B1,1,1)-WEEKDAY(DATE(B1,1,1),2)+B2*7), и нажмите Enter ключ. Смотрите скриншот ниже:
Примечание. В обеих формулах выше B1 содержит год и B2 — указанный номер недели, вы можете изменить аргументы по своему усмотрению).
3. Как видите, обе формулы возвращают числа вместо дат. Продолжайте выбирать оба результата расчета и нажмите Главная > Формат номера коробка> Короткое свидание чтобы заменить числа на даты. Смотрите скриншот ниже:
Один щелчок, чтобы преобразовать несколько нестандартных дат / чисел / текста форматирования в обычные даты в Excel
Kutools for Excel’s Преобразовать в дату Утилита может помочь вам легко определить и преобразовать нестандартные даты или числа (ггггммдд) или текст в обычные даты одним щелчком мыши в Excel.
Преобразование даты в номер недели с помощью формул
С другой стороны, вы также можете применить функцию WEEKNUM для преобразования даты в соответствующий номер недели.
1. Выберите пустую ячейку, вы вернете номер недели, введите эту формулу: = WEEKNUM (B1,1)и нажмите клавишу Enter. Смотрите скриншот:
Ноты:
(1) В приведенной выше формуле B1 содержит дату, которую вы хотите использовать.
(2) Если вам нужно вернуть номер недели с даты, которая начинается в понедельник, примените следующую формулу: = WEEKNUM (B1,2).
Статьи по теме:
Как посчитать количество конкретных дней недели между двумя датами в Excel?
Как добавить / вычесть дни / месяцы / годы на сегодняшний день в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
If you are looking for the opposite to get a date from a weeknumber i found a solution online and changed it slightly:
Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
fnDateFromWeek = DateSerial(iYear, 1, (iWeek * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End Function
I took the formular from asap-utilities.com/ and changed
DateSerial(iYear, 1, ((iWeek - 1) * 7)
to
DateSerial(iYear, 1, (iWeek * 7)
Update
It seems that at least for germany the formular works not as expected for the leap year 2016 so i changed it to this
Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
If isLeapYear(iYear) Then
curDate = DateSerial(iYear, 1, ((iWeek) * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
Else
curDate = DateSerial(iYear, 1, ((iWeek - 1) * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End If
fnDateFromWeek = curDate
End Function
Since 2016 hardcoded is not ideal you could check if a year is a leap year with this function
Function isLeapYear(iYear As Integer) As Boolean
If (Month(DateSerial(iYear, 2, 29)) = 2) Then
isLeapYear = True
Else
isLeapYear = False
End If
End Function
For a non-leap-year DateSerial(iYear,2 ,29)
returns 1st of march
This may still be wrong but my limited test gave the expected results:
Sub TestExample()
Debug.Print Format(fnDateFromWeek(2014, 48, 2), "ddd dd mmm yyyy") ' mo 24 Nov 2014
Debug.Print Format(fnDateFromWeek(2015, 11, 6), "ddd dd-mmm-yyyy") ' fr 13 Mar 2015
Debug.Print Format(fnDateFromWeek(2016, 36, 2), "ddd dd-mmm-yyyy") ' Mo 05 Sep 2015
End Sub
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel 2010 Excel 2007 Excel для Mac 2011 Excel Starter 2010 Еще…Меньше
Чтобы просмотреть более подробные сведения о функции, щелкните ее название в первом столбце.
Примечание: Маркер версии обозначает версию Excel, в которой она впервые появилась. В более ранних версиях эта функция отсутствует. Например, маркер версии 2013 означает, что данная функция доступна в выпуске Excel 2013 и всех последующих версиях.
Функция |
Описание |
ДАТА |
Возвращает заданную дату в числовом формате. |
РАЗНДАТ |
Вычисляет количество дней, месяцев или лет между двумя датами. Эта функция полезна в формулах расчета возраста. |
ДАТАЗНАЧ |
Преобразует дату из текстового формата в числовой. |
ДЕНЬ |
Преобразует дату в числовом формате в день месяца. |
ДНИ |
Возвращает количество дней между двумя датами. |
ДНЕЙ360 |
Вычисляет количество дней между двумя датами на основе 360-дневного года. |
ДАТАМЕС |
Возвращает дату в числовом формате, отстоящую на заданное число месяцев вперед или назад от начальной даты. |
КОНМЕСЯЦА |
Возвращает дату в числовом формате для последнего дня месяца, отстоящего вперед или назад на заданное число месяцев. |
ЧАС |
Преобразует дату в числовом формате в часы. |
НОМНЕДЕЛИ.ISO |
Возвращает номер недели по ISO для заданной даты. |
МИНУТЫ |
Преобразует дату в числовом формате в минуты. |
МЕСЯЦ |
Преобразует дату в числовом формате в месяцы. |
ЧИСТРАБДНИ |
Возвращает количество полных рабочих дней между двумя датами. |
ЧИСТРАБДНИ.МЕЖД |
Возвращает количество полных рабочих дней в интервале между двумя датами, руководствуясь параметрами, указывающими выходные дни и их количество. |
ТДАТА |
Возвращает текущую дату и время в числовом формате. |
СЕКУНДЫ |
Преобразует дату в числовом формате в секунды. |
ВРЕМЯ |
Возвращает заданное время в числовом формате. |
ВРЕМЗНАЧ |
Преобразует время из текстового формата в числовой. |
СЕГОДНЯ |
Возвращает текущую дату в числовом формате. |
ДЕНЬНЕД |
Преобразует дату в числовом формате в день недели. |
НОМНЕДЕЛИ |
Преобразует дату в числовом формате в число, которое указывает, на какую неделю года приходится дата. |
РАБДЕНЬ |
Возвращает дату в числовом формате, отстоящую вперед или назад на заданное количество рабочих дней. |
РАБДЕНЬ.МЕЖД |
Возвращает числовое значение даты, предшествующей заданному количеству рабочих дней или следующей за ними, руководствуясь при этом параметрами, указывающими выходные дни и их количество. |
ГОД |
Преобразует дату в числовом формате в год. |
ДОЛЯГОДА |
Возвращает долю года, которую составляет количество дней между начальной и конечной датами. |
Важно: Вычисляемые результаты формул и некоторые функции листа Excel могут несколько отличаться на компьютерах под управлением Windows с архитектурой x86 или x86-64 и компьютерах под управлением Windows RT с архитектурой ARM. Подробнее об этих различиях.
Нужна дополнительная помощь?
Номер недели по дате функцией НОМНЕДЕЛИ
Потребность знать номер рабочей недели для заданной даты (или группы дат) весьма востребованная вещь в управленческом учете. Понедельные отчеты, еженедельный контроль выполнения плана, недельная сетка вещания в рекламе – все это требует умения определять номер рабочей недели для заданной даты. Задача, на первый взгляд, простая, но (как всегда) есть несколько весьма существенных нюансов.
Во-первых, в разных странах отсчет начала и конца самой недели – различаются. У нас в России днем отсчета недели принят понедельник, а в других странах (например, США и Израиле) – воскресенье.
Во-вторых, вопрос — какую неделю считать первой? На сегодняшний момент существуют как минимум два основных варианта с разной логикой. Рассмотрим их последовательно.
Способ 1. Стандарт ГОСТ ИСО 8601-2001 и функция НОМНЕДЕЛИ.ISO
Первой рабочей неделей года считается та, на которую выпадает первый четверг года (или 4 января, если хотите). Здесь логика проста. Первая неделя – это та, на которую пришлось больше трех дней (больше половины недели) из наступившего года. Некоторое неудобство в том, что в году получается когда 52, а когда 53 рабочих недели. Плюс ко всему 1 января может запросто оказаться 52 неделей предыдущего года.
Но именно этот вариант официально принят в России с 2002 года как государственный и остается им на данный момент (см. ГОСТ ИСО 8601-2001). Чтобы посчитать номер недели по дате по такой системе, можно использовать вот такую формулу:
=ОТБР(ОСТАТ(A1+3-ДЕНЬНЕД(A1;2);365,25)/7+1)
=TRUNC(MOD(A1+3-WEEKDAY(A1;2);365,25)/7+1)
В Excel 2013 функцию для расчета номера недели по ISO добавили в стандартный набор – она называется НОМНЕДЕЛИ.ISO (WEEKNUM.ISO)
Способ 2. Неделя с 1-м января и функция НОМНЕДЕЛИ (WEEKNUM)
В этом случае первой неделей года считается та, на которую попадает 1 января. Здесь также возникает сложность в том, что в году может оказаться 52 или 53 недели и, плюс ко всему, 1 января может выпасть на воскресенье, т.е. шесть последних дней года могут оказаться уже в неделе с номером 1, что затрудняет отчетность. Тем не менее, если такой способ нумерации вам нужен, то его можно реализовать функцией НОМНЕДЕЛИ (WEEKNUM), появившейся в Excel начиная с 2007 года. Синтаксис этой функции таков:
=НОМНЕДЕЛИ(Дата; Тип_отсчета)
где
- Дата — ячейка с датой, для которой нужно определить номер недели
- Тип_отсчета — число (1, 2 или 3), обозначающее тип нумерации дней в неделе. Вариант 1 — американский (неделя начинается с воскресенья), вариант 2 — наш.
Ссылки по теме
- Основные принципы работы с датами и временем в Microsoft Excel
- Номер квартала по дате
- Вычисление возраста или стажа в годах, месяцах, днях
- Выпадающий календарь для удобного ввода даты из надстройки PLEX
У меня есть номер недели и год, и я хотел бы рассчитать дату понедельника для этой недели в Microsoft Excel.
Year Week Date (Monday)
2012 1 January 2, 2012
2013 16 April 15, 2013
2014 42 October 13, 2014
Какую формулу можно использовать для преобразования календарной недели в определенную дату?
8 ответов
Лучший ответ
Для номеров недель ISO вы можете использовать эту формулу, чтобы получить понедельник
=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7
Предполагая год в A2 и номер недели в B2
Это то же самое, что и мой ответ здесь https://stackoverflow.com/a/10855872/1124287
59
Community
23 Май 2017 в 15:17
Следующая формула подходит на каждый год. Вам больше не нужно его настраивать. Условием является то, что понедельник — ваш первый день недели.
If A2 = Year and Week = B2
=IF(ISOWEEKNUM(DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1)>1;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1+B2*7;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)-6+B2*7)
2
shankar.parshimoni
7 Янв 2015 в 14:52
Если ваш номер недели находится в A1, а год в A2, следующий фрагмент может дать вам даты полной недели.
=$A$1*7+DATE($B$1,1,-4) through =$A$1*7+DATE($B$1,1,2)
Конечно, завершите серию от -4 до 2, и у вас будут свидания с воскресенья по субботу.
Надеюсь это поможет.
1
sathyam1992
5 Апр 2016 в 16:24
Если номер недели находится в A1
, а год в A2
, вы можете попробовать:
A1*7+DATE(A2,1,1)
0
tofcoder
12 Июн 2012 в 15:47
Простое решение — использовать эту формулу:
A1*7+DATE(A2,1,1)
Если возвращается среда, просто измените формулу на:
(A1*7+DATE(A2,1,1))-2
Это будет работать только для дат в пределах одного календарного года.
= (MOD (R [-1] C-1,100) * 7 + ДАТА (INT (R [-1] C / 100 + 2000), 1,1) -2)
Yyww в качестве истечения данной недели: 51 неделя 2014 года будет 1451
0
waqar piracha
30 Окт 2014 в 07:40
Если A1 имеет номер недели и год в виде 3- или 4-значного целого числа в формате wwYY, то формула будет иметь вид:
=INT(A1/100)*7+DATE(MOD([A1,100),1,1)-WEEKDAY(DATE(MOD(A1,100),1,1))-5
Вычитание дня недели гарантирует, что вы вернетесь к постоянному дню начала недели. Используйте последнее вычитание, чтобы скорректировать день начала.
0
sampathsris
6 Апр 2016 в 06:40
Если вы ищете обратное, чтобы получить дату по номеру недели, я нашел решение в Интернете и немного изменил его:
Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
fnDateFromWeek = DateSerial(iYear, 1, (iWeek * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End Function
Я взял формуляр с сайта asap-utilities.com/ < / a> и изменил
DateSerial(iYear, 1, ((iWeek - 1) * 7)
К
DateSerial(iYear, 1, (iWeek * 7)
Обновить
Похоже, что, по крайней мере, для Германии формула работает не так, как ожидалось для високосного 2016 года , поэтому я изменил ее на этот
Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
If isLeapYear(iYear) Then
curDate = DateSerial(iYear, 1, ((iWeek) * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
Else
curDate = DateSerial(iYear, 1, ((iWeek - 1) * 7) _
+ iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End If
fnDateFromWeek = curDate
End Function
Поскольку жестко заданный 2016 год не идеален, вы можете проверить, является ли год високосным с этой функцией
Function isLeapYear(iYear As Integer) As Boolean
If (Month(DateSerial(iYear, 2, 29)) = 2) Then
isLeapYear = True
Else
isLeapYear = False
End If
End Function
Для невисокосного года DateSerial(iYear,2 ,29)
возвращает 1 марта.
Это все еще может быть неправильным, но мой ограниченный тест дал ожидаемые результаты:
Sub TestExample()
Debug.Print Format(fnDateFromWeek(2014, 48, 2), "ddd dd mmm yyyy") ' mo 24 Nov 2014
Debug.Print Format(fnDateFromWeek(2015, 11, 6), "ddd dd-mmm-yyyy") ' fr 13 Mar 2015
Debug.Print Format(fnDateFromWeek(2016, 36, 2), "ddd dd-mmm-yyyy") ' Mo 05 Sep 2015
End Sub
0
surfmuggle
21 Ноя 2020 в 04:23