You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用VBA实现连续重复0单元格组的递增计数

需求描述

我有一列从0到360的数值,示例如下:

54
54
53
53
53
...
...
2
2
2
1
1
1
0
0
0
0
0
1
1
2
2
2
....
...
359
359
0
0
0

希望将每组连续的0视为1次,找到下一组连续的0时计数递增为2,以此类推。需要编写VBA代码实现,核心是仅对连续行重复的0组进行单次计数的算法。

VBA代码实现
Sub CountZeroGroups()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim zeroGroupNum As Integer
    Dim isInZeroGroup As Boolean
    
    ' 指定数据所在工作表,根据实际修改表名
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    ' 获取数据列最后一行行号(假设数据在A列)
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    zeroGroupNum = 0
    isInZeroGroup = False
    
    ' 遍历所有数据行
    For i = 1 To lastRow
        If ws.Cells(i, "A").Value = 0 Then
            ' 首次进入连续0组时,组编号递增
            If Not isInZeroGroup Then
                zeroGroupNum = zeroGroupNum + 1
                isInZeroGroup = True
            End If
            ' 在B列写入当前0组的编号,可按需修改列位
            ws.Cells(i, "B").Value = zeroGroupNum
        Else
            ' 离开连续0组,重置标记
            isInZeroGroup = False
        End If
    Next i
    
    ' 在C1单元格输出总组数
    ws.Cells(1, "C").Value = "连续0总组数:" & zeroGroupNum
    MsgBox "计数完成,连续0总组数为:" & zeroGroupNum
End Sub
代码逻辑说明
  • 变量初始化:zeroGroupNum记录当前0组的编号,isInZeroGroup标记是否处于连续0的组内
  • 遍历判断:
    • 当遇到0且未在0组时,递增组编号并标记进入组,同时给当前行的对应列写入组号
    • 遇到非0值时,标记退出0组,确保下一组0被重新计数
  • 结果输出:完成遍历后,在指定单元格显示总组数,并弹出提示框告知结果

内容的提问来源于stack exchange,提问作者Alan Wong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:57:15