我在行上有一個非連續的範圍(例如myRange的地址:$ 2:$ 2,$ 4:$ 205,$ 214:$ 214),我想訪問特定的行和列範圍。範圍內vba循環在非連續範圍內
「獲取第2行的值,第一列
myRange.rows(2).Cells(, 1).Value
然而,這是給我的第2行的值在工作表中,而不是:我曾嘗試以下範圍 - 這意味着它給我的地址$ 3 $ 1 - 而不是$ 4 $ 1
有人可以解釋我如何訪問我的範圍內的值? (這可能與不同領域做)
謝謝
我在行上有一個非連續的範圍(例如myRange的地址:$ 2:$ 2,$ 4:$ 205,$ 214:$ 214),我想訪問特定的行和列範圍。範圍內vba循環在非連續範圍內
「獲取第2行的值,第一列
myRange.rows(2).Cells(, 1).Value
然而,這是給我的第2行的值在工作表中,而不是:我曾嘗試以下範圍 - 這意味着它給我的地址$ 3 $ 1 - 而不是$ 4 $ 1
有人可以解釋我如何訪問我的範圍內的值? (這可能與不同領域做)
謝謝
我想你想要什麼VBA做的就是看你不連續的範圍內爲連續的一個。我不認爲你正在採取的做法會奏效。你將不得不把這個看作multipe連續的範圍。下面的代碼應該讓你開始。 rowSelection是您感興趣的範圍中的行。如果輸入2,它將選擇工作簿中的第4行,因爲它是範圍中的第二行。
Sub Macro1()
Dim rowCounter As Long
Dim rowSelection As Long
rowSelection = 2
For Each Rng In Range("A2:A2,A4:A205,A214:A214").Areas
If Rng.Rows.Count >= rowSelection Then
Rng.Rows(rowSelection - rowCounter).Cells(1, 1).Select
End
Else
rowCounter = rowCounter + Rng.Rows.Count
End If
Next Rng
End Sub
這裏是我的條目 - 不超過歐文的
Function GetValue(rInput As Range, Row As Long, Column As Long) As Variant
Dim rArea As Range
Dim lCumRows As Long
Dim lActualRow As Long
For Each rArea In rInput.Areas
lCumRows = lCumRows + rArea.Rows.Count
If Row <= lCumRows Then
lActualRow = rArea.Rows(1).Row + (Row - (lCumRows - rArea.Rows.Count + 1))
Exit For
End If
Next rArea
If lActualRow > 0 Then
GetValue = rInput.Parent.Cells(lActualRow, Column).Value
End If
End Function
Function GetValue2(rInput As Range, Row As Long, Column As Long) As Variant
Dim rRow As Range
Dim lRowCnt As Long
For Each rRow In rInput.Rows
lRowCnt = lRowCnt + 1
If lRowCnt = lrow Then
GetValue2 = rRow.Cells(1, Column).Value
Exit For
End If
Next rRow
End Function
一定要好,去一些見解,爲什麼Excel中的行爲這種方式讀http://www.dailydoseofexcel.com/archives/2004/07/07/the-strange-object/。
而且測試PROC如果你有興趣
Sub test()
Dim myRange As Range
Set myRange = Union(Rows(2), Range("4:205"), Rows(214))
Debug.Print GetValue(myRange, 1, 2), GetValue(myRange, 1, 2)
Debug.Print GetValue(myRange, 2, 2), GetValue(myRange, 2, 2)
Debug.Print GetValue(myRange, 3, 2), GetValue(myRange, 3, 2)
Debug.Print GetValue(myRange, 200, 2), GetValue(myRange, 200, 2)
End Sub
謝謝大家對他們的答案 - 之前看到這些問題的答案我想通了自己和到目前爲止,這是工作。我不會說這是最efficent方法,但似乎工作:
Public Function NextRow(index As Integer, rows As Range) As Range
Dim i As Integer, r As Range
i = 1
Set NextRow = Nothing
For Each r In rows.rows
If i = index Then
Set NextRow = Range(r.Address)
Debug.Print "NextRow: " & NextRow.Address
Exit Function
End If
i = i + 1
Next r
End Function
看來類似的第二個答案 - baically我推進到範圍索引我想,比我返回一個範圍內的地址設置工作(重要!)
我不是這樣稱呼它:
NextRow(2, myRange).Cells(,1).value
此代碼遍歷一個名爲範圍:
Dim c As Range
x=0
For Each c In Range("MyNamedRange")
'if x = pick a number and do something here
MsgBox c.Address & vbTab & c.Value
x=x+1
Next c
傑弗裏,你應該考慮選擇你自己或另一個答案作爲正確的答案,點擊你最好回答你的問題旁邊的複選標記。 – 2010-04-05 03:23:37