分割范围包含多个范围到一个范围数组?

我试图将多个范围select转换为一个范围数组。

现在这是我想要的:

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 

如何将“复合”范围转换为范围数组?

Rangetypes的每个对象都有属性Areas ,其中包含其子范围的集合。 您可以对此集合中的项目进行操作,而不是创build数组。

但如果你真的需要一个数组,你可以很容易地转换它:

 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