刚接触 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
笔记:
- 我们避免选择
- 我们在一个语句中复制/粘贴
- 我们每次将目标行向下移动一行
答案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
注意事项:
- 我们不使用任何选择或激活,这样速度更快。
- 我们复制并粘贴一条语句,这样更快。
- 我们每次将目标行向下移动一行,这使得我们的代码更快。
- 我们通过编号来引用源表和目标表,这样更安全。
- 我们使用有意义的变量名,这有助于提高代码的可读性。