给定Range对象时,遍历一系列单元格中的每个单元格

Ben*_*ack 54 excel vba excel-vba

假设我有以下代码:

Sub TestRangeLoop()
    Dim rng As Range
    Set rng = Range("A1:A6")

    ''//Insert code to loop through rng here
End Sub
Run Code Online (Sandbox Code Playgroud)

我希望能够Range为每个指定的单元格迭代一组对象rng.从概念上讲,我想这样做:

For Each rngCell As Range in rng
     ''//Do something with rngCell
Next
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过手动解析rng.Address和构建Range对象来解决这个问题,但我希望有一种更直接的方法,不涉及字符串解析.

Dic*_*ika 85

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
Run Code Online (Sandbox Code Playgroud)

  • http://www.dailydoseofexcel.com/archives/2004/07/07/the-strange-object/ Cells属性是此上下文中的默认属性,因此没有它就可以使用它.在其他上下文中,Value属性是默认属性.所有Range对象都是包含Range对象的集合对象 - 我认为无限.范围是一个非常奇怪的对象,并且在每一个转折点都打破了对象/对象集合范例.但在大多数情况下,它只是起作用.:) (7认同)

cod*_*ife 13

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

以下是如何修改Dick的示例以便使用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
Run Code Online (Sandbox Code Playgroud)

而且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
Run Code Online (Sandbox Code Playgroud)