Excel 在For循环-VBA中插入行后调整最后一行

Excel 在For循环-VBA中插入行后调整最后一行,excel,vba,loops,Excel,Vba,Loops,我有一大组数据需要根据第4列中的组类型进行分解。循环的目标是插入三个空行,并将工作表的标题复制粘贴到新组的顶部。这应该一直持续到最后一行。但是,我的lastrow3似乎没有在循环中更新以说明插入的新行。在为下一个循环重新指定此循环中的最后一行时,是否缺少任何内容?谢谢 Dim lastrow3 As Integer, Dim b As Integer Range("A1").End(xlDown).Select lastrow3 = ActiveCel

我有一大组数据需要根据第4列中的组类型进行分解。循环的目标是插入三个空行,并将工作表的标题复制粘贴到新组的顶部。这应该一直持续到最后一行。但是,我的
lastrow3
似乎没有在循环中更新以说明插入的新行。在为下一个循环重新指定此循环中的最后一行时,是否缺少任何内容?谢谢

    Dim lastrow3 As Integer, Dim b As Integer
    Range("A1").End(xlDown).Select
    lastrow3 = ActiveCell.Row
  
    For b = 2 To lastrow3
        If Cells(b, 4) <> Cells(b + 1, 4) Then
        Rows(b + 1).Resize(3).EntireRow.Insert
        Rows("1").Copy
        Rows(b + 3).PasteSpecial xlPasteFormats
        Rows(b + 3).PasteSpecial xlPasteValues
        lastrow3 = lastrow3 + 3
        b = b + 4
        End If
    Next
Dim lastrow3为整数,Dim b为整数
范围(“A1”)。结束(xlDown)。选择
lastrow3=ActiveCell.Row
对于b=2到最后一行3
如果细胞(b,4)细胞(b+1,4),那么
行(b+1).调整大小(3).EntireRow.Insert
行(“1”)。复制
行(b+3).粘贴特殊XLPaste格式
行(b+3).粘贴特殊值
lastrow3=lastrow3+3
b=b+4
如果结束
下一个

已更新@加布在评论中做出了正确的决定。您的For循环存在缺陷,因为您将其设置为以特定整数结尾,但此数字可能会更改。基本上,您希望循环继续,直到到达最初标记的单元格为止,同时考虑插入的行。这可以通过使用计算该单元格行号(如果设置为变量)的方法来实现。作为变量,它将在您插入解决问题的行时更新

我已经测试过了,应该可以用了。确保
b=b+1
位于正确的位置。我不知道你做了什么

Dim theEndRange As Range
    Set theEndRange = Range("A1").End(xlDown)

Dim b As Long
    b = 2
    
    'set the looping rule here
    'theEndRange will update as rows are inserted.
Do While b <= theEndRange.Row
    
    If Cells(b, 4) <> Cells(b + 1, 4) Then
        Rows(b + 1).Resize(3).EntireRow.Insert
        Rows("1").Copy
        Rows(b + 3).PasteSpecial xlPasteFormats
        Rows(b + 3).PasteSpecial xlPasteValues
        b = b + 4
    Else
        'without this your code will loop indefinitely!!
        'if this is causing an issue, it may need to place outside if statement
        b = b + 1
    
    End If
    'or here
    'b = b+1
Loop
将范围变暗为范围
设置范围=范围(“A1”)。结束(xlDown)
暗b一样长
b=2
'在此处设置循环规则
'插入行时,范围将更新。

我还没有测试你的代码,但是一般来说,在for循环中修改计数器变量是个坏主意,因为它会导致奇怪的bug。您可能想尝试另一个循环,如while循环或do-till循环(我不记得它们在vba中的确切名称)@garbb,您将其命名为。我更新了我的答案以反映你的观察结果。因为你没有发布答案,我把你的加密答案(这很有趣)。@muzikman,我更新了我的答案(我的第一个答案不是很好)。如果这有效,如果您单击绿色的接受复选框,我将不胜感激。此外,您发布的代码中确实存在错误。它应该是
Dim lastrow3作为整数,b作为整数
,但是,我猜这不在实际代码中,或者根本不会运行。这里的关键点是,在For循环中更改
lastrow3
对循环目标没有影响。For在循环开始时缓存该值,之后更改变量对循环没有影响。旁注,更改循环计数器确实有效,但被认为是不好的做法@PGSystemTester@chrisneilsen对不起,我不知道你在说什么。我说错什么了吗?