2016-05-07 207 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 
相關問題