В Аксапте используются ISO Week numbers:
Under the ISO standard, a week always begins on a Monday, and ends on a Sunday. The first week of a year is that week which contains the first Thursday of the year, or, equivalently, contains Jan-4.
While this provides some standardization, it can lead to unexpected results — namely that the first few days of a year may not be in week 1 at all. Instead, they will be in week 52 of the preceding year! For example, the year 2000 began on Saturday. Under the ISO standard, weeks always begin on a Monday. In 2000, the first Thursday was Jan-6, so week 1 begins the preceding Monday, or Jan-3. Therefore, the first two days of 2000, Jan-1 and Jan-2, fall into week 52 of 1999.
An ISO week number may be between 1 and 53. Under the ISO standard, week 1 will always have at least 4 days. If 1-Jan falls on a Friday, Saturday, or Sunday, the first few days of the year are defined as being in the last (52nd or 53rd) week of the previous year.
Unlike absolute week numbers, not every year will have a week 53. For example, the year 2000 does not have a week 53. Week 52 begins on Monday, 25-Dec, and ends on Sunday, 31-Dec. But the year 2004 does have a week 53, from Monday, 27-Dec , through Friday, 31-Dec.
Есть ли способ получить номер недели по заданной дате или извлечь диапазон дат из определенного номера недели и года в 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
Определим понедельник или воскресенье текущей недели. Неделю будем задавать через дату.
Пусть дана дата
15.08.2012.
Определим, на какой день приходится понедельник этой недели. Ответ:
13.08.2012
.
Пусть в ячейке
А2
содержится дата
15.08.2012
, а в ячейке
B2
– число, соответствующее дню недели (1 – понедельник, 2 – вторник, …). Если в
B
2
содержится число 1, то нижеследующая формула вернет дату понедельника недели, которой принадлежит дата из ячейки
А2
(см.
Файл примера
):
=A2-(ДЕНЬНЕД(A2;2)-B2)
Если в
B
2
содержится число 7, то формула вернет дату воскресенья недели, которой принадлежит дата из ячейки
А2
.
Формула
=СЕГОДНЯ()-(ДЕНЬНЕД(СЕГОДНЯ();2)-7)
вернет воскресенье текущей недели, а
=СЕГОДНЯ()-(ДЕНЬНЕД(СЕГОДНЯ();2)-1)
— понедельник.
Альтернативный вариант — день недели задаем текстовым значением
Как видно из рисунка выше, день недели в ячейке
В2
задается с помощью
Элемента управления формы Поле со списком
, который с ней связан. Тем самым, в ячейкe
B2
вводится номер позиции элемента выбранного в Поле со списком, т.е. день недели (выбрав Вторник — второй элемент в списке, получим в ячейке
B2
число 2, т.е. второй день недели). Использовать
Элемент управления формы Поле со списком
не всегда удобно (например, при изменении ширины столбца элемент может сместиться), поэтому в
файле примера
также использована
Проверка данных
для формирования в ячейке
В11
Выпадающего списка
с днями недели.
Теперь день недели в ячейке
B11
задается не числом, а текстовым значением
Понедельник
,
Вторник
и т.д. Формулу в ячейке
С11
(аналогичную
С2
) нужно изменить на
=A11-(ДЕНЬНЕД(A11;2)-ВПР(B11;E2:F8;2;ЛОЖЬ))
В диапазоне
E2:F8
содержится вспомогательная таблица
День недели в текстовой форме — День недели в числовой форме
.