Google Sheets连续x分段计数及行拆分技术问询
Google Sheets 行内连续"x"分段计数方案
一、直接在右侧生成连续段计数
假设数据结构为:A列是描述列,B到H列为日期对应的单元格(含"x"或空白),在I2单元格输入以下数组公式,自动填充后即可得到每行的连续"x"分段计数(如示例中的3, 1):
=BYROW(A2:H, LAMBDA(row, IF(INDEX(row, 1)="",, TEXTJOIN(", ",, FILTER( LEN(SPLIT(TEXTJOIN("",, IF(ISBLANK(OFFSET(row,0,1,1,COLUMNS(row)-1)), "|", INDEX(row,0,1,1,COLUMNS(row)-1))), "|")), LEN(SPLIT(TEXTJOIN("",, IF(ISBLANK(OFFSET(row,0,1,1,COLUMNS(row)-1)), "|", INDEX(row,0,1,1,COLUMNS(row)-1))), "|"))>0 ) ) ) ))
公式逻辑:
- 用
TEXTJOIN拼接每行日期列内容,空白单元格替换为分隔符|,连续"x"会连成一串 SPLIT按|拆分后,得到每个连续"x"的组(空组对应原空白段)LEN计算每个组的长度,FILTER过滤掉空组,最后用TEXTJOIN将计数结果用逗号分隔展示
如果已将"x"替换为1、空白替换为0,只需把公式中的ISBLANK(...)改为INDEX(row,0,1,1,COLUMNS(row)-1)=0即可适配。
二、将连续"x"组拆分至新行(保留描述列)
若需要把每个连续"x"组单独拆成一行,且保留原描述列内容,在新工作表的A1单元格输入以下公式(需替换源数据为你的数据所在工作表名称):
=LET( data, 源数据!A2:H, desc, INDEX(data,,1), days, INDEX(data,,2):INDEX(data,,COLUMNS(data)), groups, BYROW(days, LAMBDA(row, SPLIT(TEXTJOIN("",, IF(ISBLANK(row), "|", "x")), "|"))), result, REDUCE("", SEQUENCE(ROWS(data)), LAMBDA(acc, i, LET( row_groups, INDEX(groups,i), valid_groups, FILTER(row_groups, LEN(row_groups)>0), count, ROWS(valid_groups), new_rows, IF(count>0, HSTACK(INDEX(desc,i), LEN(valid_groups)), ""), VSTACK(acc, new_rows) ) )), DROP(result, 1) )
公式逻辑:
- 提取描述列和日期列数据,将每行内容转换为
|分隔的字符串,拆分后得到所有连续"x"组 - 遍历每行数据,对每个有效"x"组(非空),生成包含原描述和组长度的新行
- 用
VSTACK拼接所有新行,DROP去掉初始空行,最终得到拆分后的统计表格
内容的提问来源于stack exchange,提问作者AR-7
相关产品推荐
相关产品推荐

