如何用公式将表格姓名按订单次数重复并导出至另一工作表?
解决方案(Google Sheets)
针对你制作抽奖名单的需求,这里提供两种简单易上手的公式方法:
方法一:拆分重复文本实现(新手友好)
假设原始数据在Sheet1的A列(Names)和B列(Orders),在新工作表的A1单元格输入以下公式:
=ARRAYFORMULA(IFERROR(SPLIT(FLATTEN(REPT(Sheet1!A:A&"|", Sheet1!B:B)), "|"), ""))
接着在B1单元格输入公式自动填充"row":
=ARRAYFORMULA(IF(A:A<>"", "row", ""))
公式说明:
REPT(Sheet1!A:A&"|", Sheet1!B:B):给每个姓名加上分隔符|,重复对应订单次数FLATTEN:把所有行的重复结果合并成一列文本SPLIT(..., "|"):按分隔符拆分文本,得到独立的姓名行IFERROR:处理空白行的错误提示
方法二:序列匹配实现(逻辑更清晰)
如果想直观理解重复逻辑,在新工作表A1输入:
=ARRAYFORMULA(VLOOKUP(SEQUENCE(SUM(Sheet1!B:B)), {SUMIF(OFFSET(Sheet1!B$1,0,0,ROW(Sheet1!B:B)-ROW(Sheet1!B$1)+1),">0"), Sheet1!A:A}, 2, TRUE))
B列同样用上述ARRAYFORMULA(IF(A:A<>"", "row", ""))填充。
公式说明:
SUM(Sheet1!B:B):计算总共需要生成的行数SEQUENCE(...):生成从1到总行数的序列SUMIF(...):计算每个姓名对应的累计订单区间(比如Bob Smith对应1-3,Charlie对应4)VLOOKUP:根据序列值匹配到对应的姓名
为什么单独用REPT没成功?
单独的REPT只会返回连续的文本字符串(比如Bob SmithBob SmithBob Smith),不会自动拆分成独立行,所以需要搭配FLATTEN和SPLIT把文本拆成多行。
内容的提问来源于stack exchange,提问作者cnfairchild
相关产品推荐
相关产品推荐

