Как последовательно нумеровать недели на основе диапазонов дат в Excel
Работа с датами в Excel может стать непростой задачей, особенно когда нужно последовательно нумеровать недели на основе введенных диапазонов. В этой статье мы рассмотрим, как это можно сделать, начиная с простых формул и заканчивая более сложными функциями, такими как LAMBDA.
Пример данных и первоначальная настройка
Рассмотрим исходные данные, которые могут служить примером для работы. В диапазоне ячеек B1:I1
используется формула:
=SEQUENCE(,8,DATE(2025,1,25),7)
Эта формула создает последовательность дат, начиная с 25 января 2025 года, и отображает даты через каждые 7 дней.
Перед началом работы необходимо вручную ввести данные в столбец A в формате D/M/Y, например:
2/2/25-16/2/25
02/03/2025-16 Mar 25
25/1/25-25/1/25
15/03/25-15/03/25
Задача: Нумерация недель
Наша основная задача заключается в том, чтобы последовательно нумеровать каждую неделю в зависимости от диапазонов дат в столбце A. Кроме того, если существует разрыв в шесть недель, нумерация должна начинаться с единицы заново.
Предварительная обработка дат
Для преобразования значений в ячейке A2
в реальные даты можно использовать следующую формулу:
=DATEVALUE(TEXTSPLIT(CLEAN(A2),"-",","))
Эта формула помогает получить чистые данные, разделенные запятыми и дефисами, чтобы мы могли работать с ними.
Если мы хотим получить начало и конец недели, можно использовать следующую формулу:
=LET(AllDates, DATEVALUE(TEXTSPLIT(CLEAN(A2),"-",",")),
StartDates, CHOOSECOLS(AllDates,1) + 1 - WEEKDAY(CHOOSECOLS(AllDates,1) + 1,1),
EndDates, CHOOSECOLS(AllDates,2) + 1 - WEEKDAY(CHOOSECOLS(AllDates,2) + 1,1) + 6,
HSTACK(StartDates, EndDates))
Нумерация по неделям с использованием формул
Для того чтобы добавить единицу в правильные недели по данным из столбца, можно использовать следующую формулу:
=BYCOL($B$1#, LAMBDA(ThisDate, IF(AND(ThisDate >= $A5, ThisDate <= $B5), 1, "")))
Здесь A5
и B5
— это первые две даты, полученные в результате предыдущей формулы.
Использование функции LAMBDA для упрощения работы
Если вы хотите избежать сложных манипуляций, вы можете воспользоваться функцией LAMBDA. Вот пример, как можно организовать это:
NumberWeeks = LAMBDA(raw_text, header,
LET(
max_gap, 6,
dates, DATEVALUE(TEXTSPLIT(CLEAN(raw_text), "-", ",")),
week_starts, MAP(dates, LAMBDA(d, XLOOKUP(d, header, header, , -1))),
flag_weeks, DROP(
REDUCE(
0,
header,
LAMBDA(a, b,
LET(
position_of_latest_value, XMATCH(TRUE, a <> 0, 0, -1),
latest_value, IFERROR(INDEX(a, 1, position_of_latest_value), TAKE(a, ,-1)),
restart, IFERROR(AND(COLUMNS(a) >= max_gap, position_of_latest_value < (COLUMNS(a) + 1 - max_gap)), FALSE),
increment, MAX(
BYROW(week_starts, LAMBDA(r, IF(AND(b >= INDEX(r, 1, 1), b <= INDEX(r, 1, 2)), 1, 0)))
),
HSTACK(a, IF(increment = 1, IF(restart, 1, latest_value + increment), 0))
)
)
),
,
1
),
IF(flag_weeks = 0, "", flag_weeks)
)
)
Запуск функции
Чтобы использовать написанную вами функцию, достаточно будет лишь ввести ее в ячейку и подставить соответствующий диапазон. Пример использования:
=NumberWeeks(A2, B1#)
Таким образом, благодаря использованию формул и функции LAMBDA, мы можем значительно упростить процесс работы с датами и последующей нумерации недель в Excel. Если у вас есть собственные альтернативы или предложения по улучшению, вы всегда можете делиться ими!
Заключение
Нумерация недель по диапазонам дат может быть непростой задачей, но применяя правильные формулы и функции, можно добиться желаемых результатов без лишней путаницы. Надеюсь, что эта статья дала вам полезные инструменты для работы с датами в Excel и вдохновила на новые идеи.