【发布时间】:2013-12-23 07:52:46
【问题描述】:
Dim Counter As Integer
Dim Maxhouse As Integer
Dim FindHouse As Range
Dim RangeVar As Range
Dim HousesRange As Range
For Counter = 1 To MaxHouse
ActiveSheet.Cells(16, 2 + Counter).Select
House = ActiveCell
With Sheets("Sheet1").Range("C:KP")
Set FindHouse = Cells.Find(What:=House, _
After:=Cells(17, 1), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not FindHouse Is Nothing Then
If Counter = 1 Then
Set HousesRange = FindHouse
Else
Set RangeVar = FindHouse
Set HousesRange = Union(HousesRange, RangeVar)
End If
End If
End With
Next Counter
For Each RCell In HousesRange.Cells
Application.Goto RCell, True
Next RCell**
现在我的问题是遍历命名范围“HousesRange”的for循环
假设 HousesRange 包含 [2,5,9,10]。
这里的 HousesRange 是我的工作表中 [1,2,3,4,5,6,7,8,9,10] 行的子集
假设 HousesRange 是通过 [9,10,5,2] 的顺序建立的(通过第一个 for 循环与并集)。
现在,当我仅使用 rCells(第二个 for 循环)遍历 HousesRange 时,它会将我带到 9、10、5,然后是 2。
但我希望它带我去 2、5、9 和 10
有人可以对此有所了解吗?
我一直认为命名范围总是从左到右然后从上到下遍历。
非常感谢您
【问题讨论】:
-
这段代码是否完整?你能在循环开始之前添加
HousesRange.address结果的信息吗? -
没有。这是部分代码。示例:Household 包含单元格 [1,2,3,4],但它以 [3, 4, 2, 1] 的顺序遍历,假设这是形成联合的顺序
-
编辑代码以便您可以查看上下文
-
我已经检查了不同的选项,例如
Areas、For i >> .cells(i),但没有任何效果如您所愿。我承认,目前我不知道如何快速排序。 -
嗨 KazJaw,我假设 VBA/Excel 总是从左到右,然后从上到下遍历命名范围。但这里不是这种情况。请在下面查看我的 cmets 以获取更多信息!
标签: excel vba for-loop cell union-all