有没有办法在命名范围内确定绝对单元格引用?

时间:2014-03-17 03:48:58

标签: excel-vba vba excel

我有两个相互重叠的命名范围。当我循环向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。一个可接受的替代方法是在Range1Range2中知道我在工作表本身的位置,然后在返回到范围循环之前计算工作表级别的详细信息。

任何建议都将不胜感激!

:编辑: 所以我想我的解释不够好,或者我正在做的事情对于我的目标来说过于复杂,所以这里有更多的故事:

我正在尝试填充适用于产品的多个选项列表框。

因此想象一下Range1是一个汽车列表,而Range2,Range3,Range4 ......都是可以应用于Range1中每辆汽车的所有选项组。因此Range2将是颜色,黑色,白色,红色,黄色等... Range3可能是修剪选项。 Range4可能是体型,依此类推。

现在,我需要用户选择一辆车(第5行的Dodge Dart)。现在我需要通过Range2寻找一个“X”来表示道奇Dart可用的颜色选择。如果我找到“X”,我需要抓住该列的标题并将其放入“颜色”列表框控件中。

我显然不能只搜索Range1中的每一列寻找“X”,因为每个选项组都有它自己的列表框。

对于我正在尝试做的事情有一个更大的了解,是否有某种方式使用Intersect更有意义?

列可以工作,但我认为这需要我跟踪适用于工作表上的位置的另一组变量,而不仅仅是两个范围。它会起作用,但我认为它会相当笨拙。

2 个答案:

答案 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...

感谢您的帮助。