I have a table (left) where I am defining, per row, the date/time of lessons for an individual.
I have a second table (right) which is my resulting timetable.
I am trying to use formula to populate the timetable based on the planning table - but without luck. I have tried multiple INDEX/MATCH formula plundered from web searches... but none achieve the correct result.
Each cell in the timetable, defined by their relative Time row value and Day column header values, should be populated with the corresponding Initials value where the Time/Day combo map to the Session/Day columns of the planning table.
Hence TUESDAY
, 09:00-09:30
on the timetable should be calculated as AB
, because cells K3
(Day) and L3
(Time) are mapped in the planning table - with the resulting Initials being AB
(cell C3
).
Hopefully the image will explain better than my words.
All suggestions gratefully received.
Links to sources I have tried:
Assuming no Excel Constraints
as per the tags posted, then I believe this should do what you are looking for:
• Formula used in cell Q2
=LET(
a, SEQUENCE(,COLUMNS(Table1[[Session 1 - Day]:[Session 3 - Time]])/2),
b, TOCOL(IFS(a,Table1[Initials])),
c, WRAPROWS(TOCOL(Table1[[Session 1 - Day]:[Session 3 - Time]]),2),
d, HSTACK(b,c),
XLOOKUP(1,($P2=INDEX(d,,3))*(Q$1=INDEX(d,,2)),TAKE(d,,1),""))
The above formula needs to fill down and fill right!. However, you can use the following one as well, which spills for the whole data.
• Formula used in cell Q2
=LET(
a, SEQUENCE(,COLUMNS(Table1[[Session 1 - Day]:[Session 3 - Time]])/2),
b, TOCOL(IFS(a,Table1[Initials])),
c, WRAPROWS(TOCOL(Table1[[Session 1 - Day]:[Session 3 - Time]]),2),
d, HSTACK(b,c),
MAKEARRAY(ROWS(P2:P13),COLUMNS(Q1:U1),LAMBDA(_r,_c,XLOOKUP(1,
(INDEX(P2:P13,_r)=INDEX(d,,3))*(INDEX(Q1:U1,_c)=INDEX(d,,2)),TAKE(d,,1),""))))
Note: From the screenshots of the post, looks like you are using Structured References
aka Tables
, therefore I have used tables in the formulas above and name of the table is Table1
makesure to change the name in the formula as per suit.
Another way:
• Formula used in cell Q2
=LET(
a, _Int&"|"&_Day&"|"&_Time,
b, IFS(ISERROR(LEFT(TEXTAFTER(a,"|"))/1),a),
c, TEXTSPLIT(TEXTAFTER("|"&TOCOL(b,3),"|",{1,2,3}),"|"),
MAKEARRAY(ROWS(P2:P13),COLUMNS(Q1:U1),LAMBDA(_r,_c,XLOOKUP(1,
(INDEX(P2:P13,_r)=INDEX(c,,3))*(INDEX(Q1:U1,_c)=INDEX(c,,2)),TAKE(c,,1),""))))
Where:
_Day
refers to =Table1[[Session 1 - Day]:[Session 3 - Time]]
_Int
refers to =Table1[Initials]
_Time
refers to =Table1[[Session 1 - Time]:[Session 3 - Time]]
are defined named ranges which will automatically grab the structured references for a new entry in the records.