我正在尝试在For循环中设置范围。当我这样做时,我的代码工作正常:
For Each i in Range("A1":"A5")
'Some process code
Next i
但是当我这样做时,我得不到相同的结果:
For Each i in Range("A1").End(xlDown)
'Some Process
Next i
这两个代码不相同吗?我应该对第二个进行哪些更改,它与第一个进行相同但不会让我对代码中的范围进行硬编码?
答案 0 :(得分:5)
你得到的第二个只得到范围内的最后一个单元格,我相信这将是第一个例子中的A5。相反,你需要做这样的事情。
我将此结构化为一个小测试,因此您可以看到第一个选项,更正的第二个选项,以及我希望如何执行此操作的示例。
Option Explicit
Sub test()
Dim r As Range
Dim x As Range
' Make sure there is stuff in Range("A1:A5")
Range("A1") = 1
Range("A2") = 2
Range("A3") = 3
Range("A4") = 4
Range("A5") = 5
' Your first option
For Each x In Range("A1:A5")
Debug.Print x.Address & ", " & x
Next
' What you need to do to get the full range
For Each x In Range("A1", Range("A1").End(xlDown))
Debug.Print x.Address & ", " & x
Next
' My preferred method
Set r = Range("A1").End(xlDown)
For Each x In Range("A1", r)
Debug.Print x.Address & ", " & x
Next
End Sub
答案 1 :(得分:2)
最干净的方法就是将lastRow数字存储在一个变量中。您可以在每行中进行连接:
Dim cell as range
Dim lastRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).row
For Each cell In Range("A1:A" & lastRow)
请注意,使用 xlUp 和 xlDown 会有所不同。
您会注意到很多人使用“A65536”而不是rows.count,但65536并不是某些版本的Excel的限制,因此使用rows.count总是更好。