在For循环中设置范围

时间:2011-08-28 19:56:37

标签: vba excel-vba excel-2003 excel

我正在尝试在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

这两个代码不相同吗?我应该对第二个进行哪些更改,它与第一个进行相同但不会让我对代码中的范围进行硬编码?

2 个答案:

答案 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 会有所不同。

  • xlUp为您提供A列中使用的最后一个单元格(因此您从rows.count开始)
  • XlDown为您提供最后一个非空白单元格(您可以使用范围(“A1”)。结束(xlDown)。行

您会注意到很多人使用“A65536”而不是rows.count,但65536并不是某些版本的Excel的限制,因此使用rows.count总是更好。