如果单元格大于其他列中的单元格,则 VBA 将行复制/粘贴到其他工作表

如果单元格大于其他列中的单元格,则 VBA 将行复制/粘贴到其他工作表

刚接触 VBA,试图同时弄清楚多个命令,感到很困惑。

我想将 K 列中的值与 I 列中的值进行比较,如果 K 列中的值更大,则复制该行并将其粘贴到 Sheet9,这样我就可以得到所有 K > I 实例的列表。

这就是我所拥有的:

    Sub compareresult()

Dim i As Integer

For i = 8 To 500
    If Cells(i, 11).Value > Cells(i, 9).Value Then
        ActiveCell.EntireRow.Select
        Selection.copy
        Sheets("Sheet9").range("A65000").End(xlUp).Offset(1, 1).PasteSpecial
    End If
Next i

End Sub

现在它给了我一个 400 错误消息,但是在我弄乱的过程中,它会在 Sheet9 中将值复制并粘贴到彼此之上,所以它最终只显示最终时间 K > I。有什么想法吗?

答案1

检查一下:

Sub compareresult()

Dim i As Long, K As Long

K = 1
For i = 8 To 500
    If Cells(i, 11).Value > Cells(i, 9).Value Then
        Cells(i, 11).EntireRow.Copy Sheets("Sheet9").Range("A" & K)
        K = K + 1
    End If
Next i

End Sub

笔记:

  1. 我们避免选择
  2. 我们在一个语句中复制/粘贴
  3. 我们每次将目标行向下移动一行

答案2

欢迎来到超级用户。

这相当简单,请尝试使用以下代码。不过请确保将“sheet1”替换为您的源表编号。

 Sub compareresult()

 Dim row1 As Integer
 Dim row2 As Integer

 row2 = 1
 For row1 = 8 To 500
     If sheet1.Cells(row1, 11).value > sheet1.Cells(row1, 9).value Then
         sheet1.Cells(row1, 1).EntireRow.Copy Sheets(11).Cells(row2, 1)
         row2 = row2 + 1
     End If
 Next row1

 End Sub

注意事项:

  1. 我们不使用任何选择或激活,这样速度更快。
  2. 我们复制并粘贴一条语句,这样更快。
  3. 我们每次将目标行向下移动一行,这使得我们的代码更快。
  4. 我们通过编号来引用源表和目标表,这样更安全。
  5. 我们使用有意义的变量名,这有助于提高代码的可读性。

相关内容