Excel中连续1的累积计数公式需求:按连续序列累加计分
Excel 连续1的累积计数公式
规则回顾
- 单个孤立的1,计1分(即1=1)
- 连续k个1,计1+2+...+k = k*(k+1)/2分(如2个连续1得3,3个得6)
- 总得分是所有连续1段的得分之和
方案1:适用于Excel 365/2021(动态数组版本)
假设数据在A2:E2,得分单元格输入以下公式:
=SUM(LET(r,A2:E2,len,REDUCE("",r,LAMBDA(a,b,IF(b=1,a&"1",IF(a<>"",a&"|","")))),spl,FILTER(TEXTSPLIT(len,"|"),TEXTSPLIT(len,"|")<>""),LEN(spl)*(LEN(spl)+1)/2))
公式逻辑
REDUCE将连续的1拼接成字符串,遇到0时用|分隔不同的连续段(如1,1,0,0,1会变成"11|1")TEXTSPLIT按|分割字符串,得到每个连续1的子串LEN获取每个子串的长度(即连续1的个数)- 计算每个长度对应的三角数
n*(n+1)/2,最后SUM求和得到总得分
方案2:适用于旧版Excel(兼容数组公式)
同样假设数据在A2:E2,输入以下公式后按Ctrl+Shift+Enter确认(数组公式):
=SUM(IF(FREQUENCY(IF(A2:E2=1,COLUMN(A2:E2)),IF(A2:E2=0,COLUMN(A2:E2))),FREQUENCY(IF(A2:E2=1,COLUMN(A2:E2)),IF(A2:E2=0,COLUMN(A2:E2)))*(FREQUENCY(IF(A2:E2=1,COLUMN(A2:E2)),IF(A2:E2=0,COLUMN(A2:E2)))+1)/2,0))
公式逻辑
- 用
IF提取1和0所在的列号 FREQUENCY计算每个连续1段的长度- 对每个长度计算三角数,最后
SUM求和
示例验证
用你提供的表格测试:
| Col 1 | Col 2 | Col 3 | Col 4 | Col 5 | 公式计算结果 | 预期得分 |
|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 0 | 1 | 2 | 2 |
| 0 | 1 | 1 | 0 | 0 | 3 | 3 |
| 1 | 1 | 0 | 0 | 1 | 4 | 4 |
| 0 | 1 | 1 | 1 | 0 | 6 | 6 |
所有结果均符合预期。
内容的提问来源于stack exchange,提问作者user18547675
相关产品推荐
相关产品推荐

