[英]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.Rows
、 Range.Columns
或Range.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 的臨時引用,您無權訪問(您需要處理它)。
有關更多討論,請參閱以下內容:
為了說明問題,請嘗試 For Each 示例,關閉您的應用程序,然后查看任務管理器。 您應該看到 Excel 的一個實例仍在運行(因為所有對象都沒有正確處理)。
一種更簡潔的處理方法是使用 ADO 查詢電子表格:
我在這里復活了死者,但是因為范圍可以定義為“A:A”,所以對每個循環使用 a 最終會導致潛在的無限循環。 據我所知,解決方案是使用Do Until
循環。
Do Until Selection.Value = ""
Rem Do things here...
Loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.