excel 在Google Sheets中重复每个值不同的次数[duplicate]

6jjcrrmo  于 2023-02-05  发布在  Go
关注(0)|答案(3)|浏览(131)
    • 此问题在此处已有答案**:

Repeat each row N times in Google Sheets(4个答案)
昨天关门了。
此帖子已于昨天编辑并提交审核,未能重新打开帖子:
原始关闭原因未解决
给定一个值列表和每个值 * 对应的数字n,有没有办法创建一个一维列表,其中每个值重复n次?
| | A类|乙|C级|
| - ------|- ------|- ------|- ------|
| * * 一个
*|* * 动物|* * 重复次数**|* * 结果**|
| * * 二**|土豚|三个|土豚|
| * * 3**|獾|无|土豚|
| * * 四**|水豚|1个|土豚|
| * * 五**|鸭子|第二章|水豚|
| * * 六**|||鸭子|
| * * 七**|||鸭子|
理想情况下,这将是C2中的单个公式。
我在谷歌工作表,但我也会对Excel答案感兴趣。
请注意,* 这与questions * likethese不同,questions对于所有值都具有相同的n

k5hmc34c

k5hmc34c1#

你可以试试

=TOCOL(MAP(A2:A,B2:B,LAMBDA(a,b,WRAPROWS(a,b,a))),3)

=LAMBDA(z,FILTER(z,z<>""))(FLATTEN(MAP(A2:A,B2:B,LAMBDA(a,b,IF(a="",,IFERROR(SPLIT(REPT(a&"|",b),"|")))))))

qq24tv8q

qq24tv8q2#

几乎是一样的

=INDEX(TRIM(TRANSPOSE(SPLIT(QUERY(
 REPT(A2:A10&"♠", B2:B10), ,9^9), "♠"))))

bxgwgixi

bxgwgixi3#

重复行给定次数(Excel公式)

  • 由于XLOOKUPXMATCH函数的性能较差(10k行上23s),因此将更好的MATCH函数与INDEX函数(10k行上3s)一起使用。
    • 让**
=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)

如果希望变量更少:

=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)

    • 公式截图**
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))

使用最后一个公式,定义一个名称(例如RepeatSeq),然后使用以下名称:

=RepeatSeq(A2:A5,B2:B5)

相关问题