Repeat Rows a Given Number of Times (Excel Formula)
- Due to the poor performance of the
XLOOKUP
or XMATCH
functions (23s on 10k rows), the superior MATCH
function is used with the INDEX
function (3s on 10k rows).
LET
=LET(Data,A2:A5,Repeats,B2:B5,
Both,HSTACK(Data,Repeats),Filtered,FILTER(Both,Repeats>0),
dData,TAKE(Filtered,,1),dStacked,VSTACK(dData,""),
rData,TAKE(Filtered,,-1),rSequence,SEQUENCE(SUM(rData)),
rStacked,VSTACK(0,rData),rScanned,SCAN(1,rStacked,LAMBDA(a,b,a+b)),
rIndexes,MATCH(rSequence,rScanned),
Result,INDEX(dStacked,rIndexes),Result)
If you prefer fewer variables:
=LET(Data,A2:A5,Repeats,B2:B5,
Filtered,FILTER(HSTACK(Data,Repeats),Repeats>0),
dStacked,VSTACK(TAKE(Filtered,,1),""),
rData,TAKE(Filtered,,-1),rSequence,SEQUENCE(SUM(rData)),
rScanned,SCAN(1,VSTACK(0,rData),LAMBDA(a,b,a+b)),
Result,INDEX(dStacked,MATCH(rSequence,rScanned)),Result)

Screenshot Formulas
F2 =HSTACK(A2:A5,B2:B5)
H2 =FILTER(F3#,B2:B5>0)
J2 =TAKE(H3#,,1)
K2 =VSTACK(J3#,"")
L2 =TAKE(H3#,,-1)
M2 =SEQUENCE(SUM(L3#))
N2 =VSTACK(0,L3:L5)
O2 =SCAN(1,N3#,LAMBDA(a,b,a+b))
P2 =MATCH(M3#,O3#)
Q2 =INDEX(K3#,P3#)
R2 =LAMBDA(Data,Repeats,LET(
Both,HSTACK(Data,Repeats),Filtered,FILTER(Both,Repeats>0),
dData,TAKE(Filtered,,1),dStacked,VSTACK(dData,""),
rData,TAKE(Filtered,,-1),rSequence,SEQUENCE(SUM(rData)),
rStacked,VSTACK(0,rData),rScanned,SCAN(1,rStacked,LAMBDA(a,b,a+b)),
rIndexes,MATCH(rSequence,rScanned),
Result,INDEX(dStacked,rIndexes),Result))(A2:A5,B2:B5)
S2 =LAMBDA(Data,Repeats,LET(
Both,HSTACK(Data,Repeats),Filtered,FILTER(Both,Repeats>0),
dData,TAKE(Filtered,,1),dStacked,VSTACK(dData,""),
rData,TAKE(Filtered,,-1),rSequence,SEQUENCE(SUM(rData)),
rStacked,VSTACK(0,rData),rScanned,SCAN(1,rStacked,LAMBDA(a,b,a+b)),
rIndexes,MATCH(rSequence,rScanned),
Result,INDEX(dStacked,rIndexes),Result))
Using the last formula, define a name e.g. RepeatSeq
, and use the name instead:
=RepeatSeq(A2:A5,B2:B5)