2016-05-07 164 views
2

我有一个单元格范围,让我们来说:Range(“A1:D20”),它存储在Range变量中。就我而言,范围实际上是一个命名范围。 例如从Excel中的单元格范围获取列x的单元格VBA

Set rngList = Range("LIST") 

我试图使用一个“用于每个”循环遍历仅将细胞在塔2编辑:这是一个相对的引用,而不是绝对的:该范围的第二列中。

E.g.

for each rngCell in rngList.Columns(2) 
    //Do stuff 
next 

.Columns(2)不起作用。有没有简单的方法来做到这一点?

干杯

+0

澄清:当我说“细胞在列2”,我说的是第2栏相对于细胞的范围内范围对象,而不是电子表格的第2列(即,绝对)。在我的例子中,第2列对于两者来说都是相同的,但是说它是Range(“D1:G20”),'第2列'将是E列。 – Applez00800

回答

4

.Cells.Columns(2)地址:

For Each rngCell In Range("LIST").Columns(2).Cells 
    Debug.Print rngCell 
Next 
+0

这样你就可以获得单元格的第二列,根据OP的请求 – user3598756

+1

@ user3598756,范围(“LIST”)'而不是那些_“在第2栏_中,OP没有指定它是绝对位置还是相对位置。然而,所提供的示例针对相对位置。而且,这里的问题不是关于目标列,而是谁迭代列中的单元格。 –

+0

_“仅遍历第2列中的单元格”_对我来说听起来相当于_absolute_引用。该示例由不知道如何实现上述引用目标的用户提供。我无法理解你的第三句话(_“另外......”)。最后,用户可以澄清他的需求,无论是“绝对的”还是“相对的”(尽管对于从“A”列开始的范围不相关) – user3598756

0

你可以直接从你现有的范围内使用列B(高效)创建另一个范围,或者你可以只检查,如果在现有范围内的每个细胞是在第2列,做你的东西之前:

方法1(创建衍生物范围):

Sub method1() 

    Dim rngList As Range 
    Dim rngList2 As Range 

    Set rngList = Range("LIST") 

    Set rngList2 = Range("B" & rngList.Row, Range("B" & (rngList.Row + rngList.Rows.Count - 1))) 

    For Each rngCell In rngList2 
     rngCell.Value = "hey1" 
    Next rngCell 

End Sub 

方法2(检查,如果电池是在第2栏):

Sub method2() 

    Dim rngList As Range 

    Set rngList = Range("LIST") 

    For Each rngCell In rngList 
     If rngCell.Column = 2 Then 
      rngCell.Value = "hey2" 
     End If 
    Next rngCell 

End Sub 
0

试试这个

For Each rngCell In Intersect(rngList, rngList.Parent.Columns(2)) 
' //Do stuff 
Next 
相关问题