夜雨聆风学习资料网

ARTICLE · 1012420

Excel 高阶玩法|一键算出最长连续连胜场次,不用辅助列

Excel 高阶玩法|一键算出最长连续连胜场次,不用辅助列

01

业务场景
比赛、考勤、生产记录,需要统计最长连续出现某状态的次数。
本例:B 列是每场比赛胜负结果,需要算出历史上最长的连续连胜场数。
表格中可以看到出现过连续 3 场胜利,公式输出结果3。
传统方法:需要辅助列做标记、累加,还要处理中断重置逻辑,步骤繁琐。
Excel365 动态数组组合公式,单个单元格直接算出最长连续连胜,不用辅助列。
完整公式:
=MAX(LEN(TEXTSPLIT(CONCAT(IF(B2:B12="胜",1,0)),0)))

02

公式逐层拆解
=MAX(LEN(TEXTSPLIT(CONCAT(IF(B2:B12="胜",1,0)),0)))
  1. IF(B2:B12="胜",1,0)遍历每一行胜负,胜利输出数字1,非胜利(负 / 平)输出数字0。得到数组:{0;0;1;1;1;0;0;1;0;1;1}
  2. CONCAT(...)把上面数组全部拼接成一串文本字符串:00111001011
  3. TEXTSPLIT(...,0)用0作为分隔符拆分字符串,把 0 全部切掉,剩下由连续 1 组成的片段:{"","","111","","1","11"}
  4. LEN(...)计算每一段文本的字符长度,也就是每一段连胜的场次:{0,0,3,0,1,2}
  5. MAX(...)
取出里面最大的数字,得到最长连续连胜场次:3

03

通用模板
模板 1:统计最长连续 "胜" 的次数(本例)
=MAX(LEN(TEXTSPLIT(CONCAT(IF(数据区域="胜",1,0)),0)))
拓展 1:统计最长连续 "负" 场
只需要修改 IF 的判断条件:
=MAX(LEN(TEXTSPLIT(CONCAT(IF(B2:B12="负",1,0)),0)))
拓展 2:考勤场景,统计最长连续出勤天数
B 列为考勤,"出勤" 为有效状态
=MAX(LEN(TEXTSPLIT(CONCAT(IF(B2:B12="出勤",1,0)),0)))
拓展 3:屏蔽空单元格干扰
如果区域内存在空白单元格,空白会被判定为非目标状态,自动作为分隔断点。
=MAX(LEN(TEXTSPLIT(CONCAT(IF(B2:B12="胜",1,0)),0)))

04

传统辅助列思路对比
辅助列 C2 输入:
=IF(B2="胜",C1+1,0)
向下填充,最后用MAX(C2:C12)得到最大值。
  • 优点:逻辑直观,旧版 Excel 可用
  • 缺点:必须占用一整列辅助单元格;数据增减,辅助列要同步维护;不适合仪表盘、看板场景。
✅数组公式方案:
  • 优点:单单元格完成全部计算,零辅助列,适合报表看板;
  • 缺点:需要 Excel365/2021 及以上动态数组版本。

05

避坑要点
  1. 整套函数依赖CONCAT、TEXTSPLIT动态数组,旧版 Excel 无法运行。
  2. 判断文本要完全匹配,区分中英文符号,"胜"不要写成胜(缺少英文双引号)。
  3. 只要出现非目标值(负、平、空白),就视为链条中断,重新开始计数。
  4. 如果全部记录都没有胜利,公式返回0,不会报错。

相关学习资料