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
相关产品推荐
相关产品推荐

