Excel/Google Sheets逗号分隔列表随机分组技术实现问询
Excel/Google Sheets 逗号分隔列表随机打乱并按指定组数拆分
步骤1:随机打乱原列表
先将A2的逗号分隔列表随机打乱,在任意空白单元格(比如G2)输入公式:
=TEXTJOIN(", ", TRUE, SORTBY(TEXTSPLIT(A2, ", "), RANDARRAY(COUNTA(TEXTSPLIT(A2, ", ")))))
公式说明:
TEXTSPLIT(A2, ", "):把原列表拆分为单个元素的数组RANDARRAY(...):生成与元素数量匹配的随机数数组SORTBY(...):按随机数排序原元素数组,实现打乱TEXTJOIN(...):将打乱后的元素重新合并为逗号分隔的字符串
之后可将打乱后的结果作为新数据源(替换A2或直接在分组公式中引用)
步骤2:精准截取第N组内容
假设已完成以下基础计算:
- B2:总人数,公式
=LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1 - C2:指定分组数(最多50组)
- D2:每组人数,公式
=ROUNDUP(B2/C2,)
要在第2行的列中依次输出各组内容(比如从E2开始,E2为第1组、F2为第2组……),在E2输入公式并向右填充至第C2列:
=LET( arr, TEXTSPLIT($A2, ", "), total, $B2, group_size, $D2, group_num, COLUMN()-COLUMN($E2)+1, start_pos, (group_num-1)*group_size + 1, end_pos, MIN(group_num*group_size, total), IF(start_pos>total, "", TEXTJOIN(", ", TRUE, INDEX(arr, SEQUENCE(end_pos-start_pos+1, 1, start_pos)))) )
公式说明:
arr:拆分后的元素数组group_num:通过当前列与起始列(E2)的偏移量,自动计算当前组号start_pos/end_pos:计算当前组的元素起止位置,最后一组自动适配剩余人数INDEX(arr, SEQUENCE(...)):提取对应区间的元素并合并为字符串;组号超出人数范围时返回空值
适配Google Sheets的调整
Google Sheets中函数语法基本一致,若需兼容旧版本,可将SEQUENCE替换为ROW(INDIRECT(start_pos&":"&end_pos)),调整后的公式:
=LET( arr, SPLIT(A2, ", "), total, B2, group_size, D2, group_num, COLUMN()-COLUMN(E2)+1, start_pos, (group_num-1)*group_size + 1, end_pos, MIN(group_num*group_size, total), IF(start_pos>total, "", TEXTJOIN(", ", TRUE, INDEX(arr, ROW(INDIRECT(start_pos&":"&end_pos))))) )
内容的提问来源于stack exchange,提问作者Vexel
相关产品推荐
相关产品推荐

