2015-12-22 159 views
2

我試圖將多個範圍選擇轉換爲範圍數組。分割範圍包含多個範圍到一個範圍數組中?

眼下這就是我想:

Private Function SplitRange(ByRef r As Range) As Range() 
    Dim i As Long 
    Dim RangesArray() As Range 
    Dim AddressArray() As String 
    Dim Address As Variant 
    i = 0 
    AddressArray = Split(r.Address, ",") 
    ReDim RangesArray(UBound(AddressArray)) 
    For Each Address In AddressArray 
     Set RangesArray(i) = Range(Address) 
     i = i + 1 
    Next Address 
    ' It works till this point, executing RangesArray(0).Address returns a range address 
    SplitRange = RangesArray 
    ' Here for some reason neither SplitRange(0).Address or RangesArray(0).Address work 
End Function 

我如何轉換的「複合型」的範圍爲範圍的數組?

+0

'RangesArray(0).Address'應該工作正常(不適合我)。 'SplitRange(0).Address'將不起作用,因爲它再次調用函數'0'作爲'Range'。 – Rory

回答

2

Range類型的每個對象都有屬性Areas,其中包含其子範圍的集合。您可以對此集合中的項目進行操作,而不是創建數組。

但如果你真的需要一個數組,你可以很容易地將它轉換這樣的:

Public Function SplitRange(ByRef r As Range) As Range() 
    Dim i As Long 
    Dim ranges() As Range 
    Dim subrange As Range 
    '---------------------------------------------------------------- 

    ReDim ranges(0 To r.Areas.Count - 1) 
    For Each subrange In r.Areas 
     Set ranges(i) = subrange 
     i = i + 1 
    Next subrange 

    SplitRange = ranges 

End Function 
+2

很好的答案,但我想不出一個很好的理由將'Areas'從一個集合轉換爲一個數組。我懷疑OP是不知道「Areas」的,可能只是爲了他們的目的直接使用它。 –

+0

你說得對,我已經修改了我的答案以包含該內容。 – mielk