求Excel中单列公式:统计连续重复的0和1的出现次数
嘿,我完全明白你要实现的效果!之前搜到的旧公式不管用大概率是版本兼容的问题,我给你两个适配不同Excel版本的单公式方案,都是直接能用的:
方案1:适用于Excel 365/2021(动态数组版本)
这个版本的Excel支持动态数组和LAMBDA函数,公式非常简洁,输入后会自动填充整个列:
- 假设你的数据从A2单元格开始(A1可以设为表头“原始值”),在B1单元格输入表头“连续计数”。
- 选中B2单元格,输入以下公式后直接按回车:
=SCAN(0,A2:A16,LAMBDA(累计计数,当前值,IF(当前值=OFFSET(当前值,-1,0),累计计数+1,1)))
- 公式会自动填充B2到B16,正好对应你要的结果。
公式简单解释:
SCAN函数会逐个遍历A2到A16的数值,累计计数是上一个单元格的统计结果,当前值是当前A列的数值。- 如果当前值和它上一个单元格的数值(
OFFSET(当前值,-1,0))相同,就把累计计数加1;如果不同,就重置为1。 - 因为A2是第一个数据,它的上一个单元格A1是空值,所以B2会直接显示1,完全符合你的需求。
方案2:适用于Excel 2019及更早版本(数组公式)
如果你的Excel版本不支持动态数组,就用这个数组公式,需要手动下拉填充:
- 同样假设数据从A2开始,在B2单元格输入以下公式:
=COUNTIF(INDIRECT("A"&MAX(IF(A$2:A2<>A2,ROW(A$2:A2),ROW(A$2)-1))&":A2"),A2)
- 一定要按住Ctrl+Shift+Enter组合键输入(不能只按回车),此时公式会被自动加上大括号
{},表示这是数组公式。 - 把鼠标放在B2单元格右下角,当光标变成十字形时,下拉填充到B16即可。
公式简单解释:
IF(A$2:A2<>A2,ROW(A$2:A2),ROW(A$2)-1):检查从A2到当前行的所有值,找出和当前值不同的行号;如果没有不同值(比如第一个1),就用A2的上一行行号。MAX(...):取上述行号的最大值,也就是当前连续序列的起始行的上一行。INDIRECT(...):生成从起始行到当前行的单元格范围。COUNTIF(...):统计这个范围内和当前值相同的数量,就是连续出现的次数。
用这两个公式都能得到你要的结果:
| A列 | B列 |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 0 | 1 |
| 0 | 2 |
| 1 | 1 |
| 0 | 1 |
| 1 | 1 |
| 1 | 2 |
| 0 | 1 |
| 0 | 2 |
| 1 | 1 |
| 0 | 1 |
| 0 | 2 |
| 1 | 1 |
内容的提问来源于stack exchange,提问作者Fábio Linhares
相关产品推荐
相关产品推荐

