Vba &引用;“下一步”;IF语句为true时不在循环中工作

Vba &引用;“下一步”;IF语句为true时不在循环中工作,vba,excel,Vba,Excel,我正在尝试检查当前行中包含唯一ID(多个列的串联)的单元格,并将其与唯一ID上方的行进行比较。如果值相同,我希望复制当前行,并将此副本插入位于当前行上方两行的新行中。如果ID不相同,我不想做任何事情并移动到工作表上的下一行 下面的代码运行时没有错误,并且在找到ID匹配之前可以正常工作。代码按照我的要求复制和插入,但它的行为就像是为同一行再次启动“IF”语句(“next”不会前进到分析下一行)。因此,我最终得到了第一行的无休止的拷贝和插入,该行与上面的行具有匹配的唯一ID Sub CopyAndI

我正在尝试检查当前行中包含唯一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)中不匹配,则“下一行”将按预期工作,并继续到下一行。只有当ID的do匹配并且插入复制的行时,才会出现不前进的问题


提前感谢您的帮助

将循环绑定到变量并手动将其增加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

因为您要在其中插入行,然后更改循环的初始范围。插入或删除行时,最好从下到上遍历列表。在if循环中写入
Next
。和外面一样well@SanjayKumaar这会不会导致错误,因为接下来会有2个
只有1个
?@ScottCraner谢谢-这是合乎逻辑的,我不知道为什么我一开始就没有这样构造。我将在短期内使用J.Fox的解决方案,同时重新构造从下到上的循环。这确实有效,但会抛出一些我在原始问题中没有包含的代码。代码(如下所示)用于将CK列中的值添加到“匹配”行中,并将总和值放入新插入的“复制”行中
rngrow.Cells(-1,89)=rngrow.Cells(0,89)+rngrow.Cells(1,89)
我无法将我的rngrow重新格式化为您的“范围”格式--有什么建议吗?放入
单元格(x-1,89)。公式=单元格(x,89)。值+单元格(x+1,89)。在
x=x+1
之前的行中,Value
应该可以解决trickI在您的代码中遇到问题,如果数据在一行中有4个ID匹配的行,那么它将插入3个新行,而它本应只添加2个。我不确定,但这可能是可以解决的,从下到上循环,并在两个匹配行下面添加“复制”行-你怎么看?如果4行有ID,那么它为什么不复制三次?似乎当一行中有M个匹配的ID时(其中M>=2),最终会复制M-1行。第一次迭代:检查第1行与第0行=不匹配。第二次迭代:检查第2行v第1行=匹配。第三次迭代:检查第3行v第2行=匹配。第四次迭代:检查第4行v第3行=匹配。我可以通过将x=3的
更改为lastRow
将x=lastRow的
更改为第3步-1
x=x+1
更改为
x=x-1