合并Google Sheets公式为动态公式,实现按指定数量分组TEXTJOIN拼接
解决Google Sheets动态分组TEXTJOIN拼接问题
你的问题核心是**按动态指定的分组大小(而非固定值)**对Sheet1的25条数据进行带单引号的字符串拼接,原公式用固定MOD(...,5)无法适配动态分组需求,这里提供两种可行方案:
方案1:用LET+SCAN+BYROW实现动态分组拼接
假设Sheet2中「Number of Textjoins」列的分组大小数据在A2:A6(对应5、6、4、5、5),Sheet1的待拼接数据在B2:B26(共25条),可以使用以下公式:
=LET( group_sizes, Sheet2!A2:A6, cumulative, SCAN(0, group_sizes, LAMBDA(acc, size, acc + size)), start_rows, DROP(cumulative, -1) + 2, end_rows, DROP(cumulative, 1) + 1, BYROW(SEQUENCE(ROWS(group_sizes)), LAMBDA(idx, TEXTJOIN("', '", TRUE, "'" & INDIRECT("Sheet1!B"&start_rows[idx]&":B"&end_rows[idx]) & "'") )) )
公式说明:
LET:定义变量简化公式结构SCAN:计算分组大小的累计和,确定每个分组的边界位置start_rows/end_rows:推导每个分组在Sheet1中的起始/结束行号BYROW:遍历每个分组,用TEXTJOIN拼接对应范围的带单引号数据
方案2:用OFFSET+累计求和实现(更直观)
如果不习惯SCAN函数,也可以用累计求和的方式手动定位分组范围:
=BYROW(Sheet2!A2:A6, LAMBDA(size, TEXTJOIN("', '", TRUE, "'" & OFFSET(Sheet1!B2, SUM(Sheet2!A$2:A1)-1, 0, size) & "'") ))
注意:公式中的
A$2:A1是相对引用,会随BYROW遍历自动调整,计算当前分组的起始偏移量
原公式问题分析
你之前的公式仅筛选了每5条数据的最后一条(通过MOD(...,5)=0),并未对整个分组进行拼接,且固定分组大小为5,无法适配动态的5/6/4/5/5分组需求,因此无法得到预期结果。
内容的提问来源于stack exchange,提问作者HSHO
相关产品推荐
相关产品推荐

