Forum Discussion
DaeyunPablo
Aug 08, 2024Brass Contributor
Dynamic Calendar in Excel 365
Hi, I create a dynamic array formula for projects at work. It takes project start & end dates and returns a calendar where its duration is based off of those two inputs. Please let me know if the...
djclements
Aug 09, 2024Bronze Contributor
DaeyunPablo Here's my array manipulation variant, using TOCOL, IF, SORTBY and WRAPROWS:
=LET(
wrap_count, 3,
start_date, MIN(B7:B15),
end_date, MAX(B7:B15),
months, CEILING.MATH((YEAR(end_date) - YEAR(start_date)) * 12 + MONTH(end_date) - MONTH(start_date) + 1, wrap_count),
month_start, DATE(YEAR(start_date), MONTH(start_date) + SEQUENCE(months,, 0), 1),
period_start, month_start - WEEKDAY(month_start) - 13,
period_end, period_start + 55,
seq_start, MIN(period_start),
all_dates, SEQUENCE(, MAX(period_end) - seq_start + 1, seq_start),
test, (period_start > all_dates) + (period_end < all_dates),
period_dates, TOCOL(IF(test, NA(), all_dates), 2),
first_dates, TOCOL(IF(test, NA(), month_start), 2),
wrap_ID, INT(SEQUENCE(ROWS(period_dates),, 0) / (wrap_count * 56)),
week_ID, TOCOL(IF(SEQUENCE(months), TOROW(IF(SEQUENCE(, 7), SEQUENCE(8))))),
sort_ID, wrap_ID * 8 + week_ID,
output, IF(week_ID = 1, IF(WEEKDAY(period_dates) = 4, TEXT(first_dates, "mmm-yyyy"), ""),
IF(week_ID = 2, TEXT(period_dates, "ddd"), IF(MONTH(period_dates) = MONTH(first_dates), period_dates, 0))),
WRAPROWS(SORTBY(output, sort_ID), wrap_count * 7)
)
Change the wrap_count if you want to output 2 or 4 months across, for example. I expanded the conditional formatting rules to accommodate up to 4 months across for demonstration purposes, but you could expand them further, if desired.
EDIT: after testing it with a larger date range (with the conditional formatting rules removed), it didn't hold up as well as I'd hoped. The REDUCE / STACK method was actually faster... so sad π
DaeyunPablo
Aug 11, 2024Brass Contributor
Unfortunate, I was hoping to see an alternative which can be used in general instead of REDUCE/STACK method... But nice version of yours, looking at it I updated my formula which has the 3rd input 'mth_in_row_num' to expand/shrink the calendar horizontally.
Please do let us know if you come up with a faster alternative later!
Please do let us know if you come up with a faster alternative later!