给定Range对象时,循环遍历单元格区域中的每个单元格

假设我有以下代码:

Sub TestRangeLoop() Dim rng As Range Set rng = Range("A1:A6") ''//Insert code to loop through rng here End Sub 

我希望能够遍历rng指定的每个单元格的Range对象的集合。 从概念上讲,我想这样做:

 For Each rngCell As Range in rng ''//Do something with rngCell Next 

我知道我可以通过手动parsingrng.Address和构buildRange对象来解决这个问题,但我希望有一个更直接的方式,不涉及stringparsing。

 Sub LoopRange() Dim rCell As Range Dim rRng As Range Set rRng = Sheet1.Range("A1:A6") For Each rCell In rRng.Cells Debug.Print rCell.Address, rCell.Value Next rCell End Sub 

你可以使用Range.RowsRange.ColumnsRange.Cells 。 每个集合都包含Range对象。

以下是如何修改迪克的示例,以便使用Rows

 Sub LoopRange() Dim rCell As Range Dim rRng As Range Set rRng = Sheet1.Range("A1:A6") For Each rCell In rRng.Rows Debug.Print rCell.Address, rCell.Value Next rCell End Sub 

Columns

 Sub LoopRange() Dim rCell As Range Dim rRng As Range Set rRng = Sheet1.Range("A1:A6") For Each rCol In rRng.Columns For Each rCell In rCol.Rows Debug.Print rCell.Address, rCell.Value Next rCell Next rCol End Sub 

要记下迪克的答案,这是正确的,但我不会推荐使用For Each循环。 For Each创build了一个临时引用,指向您无法访问的场景后面的COM单元(为了处理它,您将需要这个引用)。

请参阅以下内容以获得更多讨论

如何正确清理Excel互操作对象?

为了说明这个问题,请尝试For Each示例,closures应用程序,然后查看任务pipe理器。 您应该看到Excel的实例仍在运行(因为所有对象都没有正确处理)。

处理这个问题的更简单的方法是使用ADO查询电子表格:

http://technet.microsoft.com/en-us/library/ee692882.aspx

我在这里复活死人,但是因为一个范围可以定义为“A:A”,所以对每个循环使用a最后都会有一个潜在的无限循环。 就我所知,解决scheme是使用Do Until循环。

 Do Until Selection.Value = "" Rem Do things here... Loop