簡體   English   中英

當給定 Range 對象時,循環遍歷單元格范圍內的每個單元格

[英]Loop through each cell in a range of cells when given a Range object

假設我有以下代碼:

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

我知道我可以通過解析rng.Address並手動構建Range對象來解決這個問題,但我希望有一種更直接的方法,不涉及字符串解析。

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對象。

以下是如何修改 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

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

為了記錄 Dick 的回答,這是正確的,但我不建議使用 For Each 循環。 For Each 在幕后創建一個對 COM Cell 的臨時引用,您無權訪問(您需要處理它)。

有關更多討論,請參閱以下內容:

如何正確清理 Excel 互操作對象?

為了說明問題,請嘗試 For Each 示例,關閉您的應用程序,然后查看任務管理器。 您應該看到 Excel 的一個實例仍在運行(因為所有對象都沒有正確處理)。

一種更簡潔的處理方法是使用 ADO 查詢電子表格:

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

我在這里復活了死者,但是因為范圍可以定義為“A:A”,所以對每個循環使用 a 最終會導致潛在的無限循環。 據我所知,解決方案是使用Do Until循環。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM