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

VBA技术问询:如何在新循环行开始时重置变量add为1

解决VBA中循环行开始时重置变量的问题

根据你的需求,要在每次进入新的循环行(或新分组)时将Add重置为1,我分两种常见场景给你针对性的解决方案:

场景1:每次循环迭代(每一行)都重置Add

如果你的逻辑是每处理一行i,就需要把Add重置为1,只需要把Add = 1移到For循环的内部开头即可。这样每次i递增进入新循环时,Add都会被重新赋值为1:

Sub Group()
    Dim DataBook As String
    Dim i As Long, RowCount As Long, RowCount2 As Long, Add As Integer
    DataBook = ThisWorkbook.Name
    
    RowCount = 1
    RowCount2 = 1
    
    ' 用With简化工作表引用,减少重复代码
    With Workbooks(DataBook).Sheets("Template")
        For i = 19 To 1819
            Add = 1 ' 每次进入新行循环时重置为1
            If .Range("G" & i).IndentLevel = 8 Then
                Workbooks(DataBook).Sheets("Sheet1").Cells(RowCount, 2) = .Range("G" & i).Value
                RowCount = RowCount + 1
                ' 这里补充你未写完的逻辑,比如判断.Range("G" & i - Add)的内容
            End If
        Next i
    End With
End Sub

场景2:仅当遇到新分组(IndentLevel=8的行)时重置Add

如果Add是用来统计分组内的行数,需要每次遇到新的IndentLevel=8的行(新分组)时重置为1,那就在这个条件判断内部重置Add,后续组内的行再按需累加:

Sub Group()
    Dim DataBook As String
    Dim i As Long, RowCount As Long, RowCount2 As Long, Add As Integer
    DataBook = ThisWorkbook.Name
    
    RowCount = 1
    RowCount2 = 1
    Add = 1 ' 初始值
    
    With Workbooks(DataBook).Sheets("Template")
        For i = 19 To 1819
            If .Range("G" & i).IndentLevel = 8 Then
                Add = 1 ' 遇到新分组时重置为1
                Workbooks(DataBook).Sheets("Sheet1").Cells(RowCount, 2) = .Range("G" & i).Value
                RowCount = RowCount + 1
            Else
                ' 如果是分组内的行,可根据需求累加Add
                Add = Add + 1
            End If
            ' 这里执行你未写完的逻辑,比如判断.Range("G" & i - Add).IndentLevel
        Next i
    End With
End Sub

另外给你个小优化建议:尽量给变量加上明确的类型声明(比如Dim Add As Integer),同时用With语句简化重复的工作表引用,这样代码更易读且不易出错。

内容的提问来源于stack exchange,提问作者Liang Wu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:40:02