我有两个相互重叠的命名范围。当我循环向Range1 (A3:Z20)
行时,我还需要遍历Range1
的较小部分的列,因此我创建了Range2 (G1:K20)
。
我在Range2
循环中寻找的是,如果当前Range1
行的任何一列中都有“X”,我需要获取列的标题,这就是Range1
忽略第1行和第2行的原因,但Range2
没有。
我的代码看起来像这样:
For intRowCntr = 1 To Range("Range1").Rows.Count
For intColCntr = 1 To Range("Range2").Columns.Count
If Range("Range1").Cells(intRowCntr, %intColCntr%) = "X" Then
'Do a bunch of stuff here.
End If
Next intColCntr
Next intRowCntr
我用%intColCntr%
标记了%
以指出我需要魔法发生的地方。显然,%intColCntr%
将无法正常工作,因为它在Range2中为column 1
,在column 7
中为Range1
。
这很简单,我可以想到做一个例子,希望有人能看到我得到的东西。基本上我需要知道我与Range1
的关系,同时循环Range2
。一个可接受的替代方法是在Range1
和Range2
中知道我在工作表本身的位置,然后在返回到范围循环之前计算工作表级别的详细信息。
任何建议都将不胜感激!
:编辑: 所以我想我的解释不够好,或者我正在做的事情对于我的目标来说过于复杂,所以这里有更多的故事:
我正在尝试填充适用于产品的多个选项列表框。
因此想象一下Range1是一个汽车列表,而Range2,Range3,Range4 ......都是可以应用于Range1中每辆汽车的所有选项组。因此Range2将是颜色,黑色,白色,红色,黄色等... Range3可能是修剪选项。 Range4可能是体型,依此类推。
现在,我需要用户选择一辆车(第5行的Dodge Dart)。现在我需要通过Range2寻找一个“X”来表示道奇Dart可用的颜色选择。如果我找到“X”,我需要抓住该列的标题并将其放入“颜色”列表框控件中。
我显然不能只搜索Range1中的每一列寻找“X”,因为每个选项组都有它自己的列表框。
对于我正在尝试做的事情有一个更大的了解,是否有某种方式使用Intersect更有意义?
列可以工作,但我认为这需要我跟踪适用于工作表上的位置的另一组变量,而不仅仅是两个范围。它会起作用,但我认为它会相当笨拙。
答案 0 :(得分:2)
Intersect Function
所以试试这个:
Dim cel As Range
For Each cel in Range("Range1")
If Not Intersect(cel, Range("Range2")) Is Nothing Then
If cel.value = "X" Then
'do your stuff here
End If
End If
Next
我使用For Each Lopp
而不是传统的For-Next Loop
,因此我可以轻松使用Intersect
。
希望这可以帮助你或者解决你的问题。
上述第2版:
Dim cel As Range
For Each cel in Intersect(Range("Range1"),Range("Range2"))
If cel.value = "X" Then
'do your stuff here
End If
Next
答案 1 :(得分:1)
我决定只使用Column属性。相交过于繁琐。
以下是关于我如何开展这项工作的代码信息:
'...Lots of code looking at the first 4 Array elements...
intHoldCol = Range("Range2").Cells(1, 1).Column
For intColCntr = intHoldCol To intHoldCol + Range("Range2").Columns.Count
If Len(Range("Range1").Cells(intRowCntr, intColCntr)) > 0 _
And Cells(1, intColCntr).Value = arySelected(4) Then
bolTest = True
End If
Next intColCntr
'...Lots more code...
感谢您的帮助。