当IF语句为真时,“Next”不在循环中工作

时间:2017-08-25 18:01:21

标签: excel vba excel-vba

我正在尝试检查当前行中包含唯一ID(多列的串联)的单元格,并将其与其唯一ID上方的行进行比较。如果值相同,我想复制当前行并将此副本插入位于当前行上方两行的新行中。如果ID不相同,我想什么都不做,然后移到工作表的下一行。

下面的代码运行没有错误,并且在找到ID匹配之前正常工作。代码按照我的要求进行复制和插入,但它的作用就像是为同一行再次启动“IF”语句(“next”不会提前分析下一行)。所以我最终获得了第一行的无限复制和插入,其中有一个匹配的唯一ID到它上面的行。

Sub CopyAndInsert
    Dim LastRow As Long
    LastRow = Worksheets("Orders").Range("A" & Rows.Count).End(xlUp).Row

    Set SelectionRNG = Worksheets("Orders").Range("A2:CX" & LastRow)
    For Each rngrow In SelectionRNG.Rows
        rngrow.Copy
        If rngrow.Cells(1, 102) = rngrow.Cells(0, 102) Then   'checks if row CX is equal to the row above it (same column)
            rngrow.Cells(2, 1).Offset(-2, 0).EntireRow.Insert
        End If
    Next
End Sub

请注意,如果行在唯一ID列(CX)中不匹配,则“next”确实按预期工作并继续到下一行。只有在ID匹配并插入复制的行时才会出现不提前的问题。

提前感谢您的任何帮助!

1 个答案:

答案 0 :(得分:1)

将循环绑定到变量并手动将其增加1以跳过添加的行似乎有效:

Sub CopyAndInsert()
Dim lastRow As Long, x As Long
lastRow = Worksheets("Orders").Range("A" & Rows.Count).End(xlUp).Row

For x = 3 To lastRow
    If Cells(x, 102) = Cells(x - 1, 102) Then
        Cells(x - 1, 1).EntireRow.Insert
        Range("A" & x + 1 & ":" & "CX" & x + 1).Copy Cells(x - 1, 1)
        x = x + 1
    End If
Next x

End Sub
相关问题