VBA For循环跳过第一次迭代

VBA For循环跳过第一次迭代

我正在尝试编写一个宏来检测单元格是否包含某个单词。如果是,则将整行复制到下一个空行。

在这种情况下,我尝试从“全长,60 秒,30 秒,15 秒,刺痛”中检测“60 秒”。

这是我得到的,但它只复制并粘贴最后一行合格的行,跳过第一次迭代。

Private Sub Button_Click()

lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
    If InStr(Cells(i, "G"), "60s") > 0 Then
        Rows(i).Copy Rows(lr + 1)
    End If
Next

End Sub

答案1

我看到的是,您的代码首先查看列A以找到最后使用的行,然后将结果放入变量中lr。然后,它遍历从2到的每一行lr(由列确定)A并查看列中的值G。如果值包含“60s”,则行将复制到行下方lr

让我们从这个数据集开始:

在此处输入图片描述

在列中找到您的值后G,该行将被复制到行下方lr
在此处输入图片描述

再次找到列中的值后G,该行将再次被复制下行lr
在此处输入图片描述

现在你可以看到问题了。第三次我们看到了同样的事情:
在此处输入图片描述

因此,很明显,你一直在复制之前的结果,因为lr在开始时就已定义,并且不会改变。我们可以在行lr=lr+1后使用 exact 来修复它Copy。所以这将满足你的要求:

Private Sub Button_Click()

lr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lr
    If InStr(Cells(i, "G"), "60s") > 0 Then
        Rows(i).Copy Rows(lr + 1)
        lr = lr + 1
    End If
Next

End Sub

在此处输入图片描述

相关内容