Arrays 将包含多个范围的范围拆分为一个范围数组?
我正在尝试将多个范围选择转换为范围数组 现在,这就是我正在尝试的:Arrays 将包含多个范围的范围拆分为一个范围数组?,arrays,vba,excel,range,Arrays,Vba,Excel,Range,我正在尝试将多个范围选择转换为范围数组 现在,这就是我正在尝试的: 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, ",")
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
如何将“复合”范围转换为范围数组?范围类型的每个对象都具有包含其子范围集合的属性
区域。您可以操作此集合中的项,而不是创建数组
但如果您真的需要阵列,您可以像这样轻松地转换它:
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
RangesArray(0)。地址
应该可以正常工作(适合我)SplitRange(0)。Address
将不起作用,因为它再次调用函数,将0
作为Range
传递。答案很好,但我想不出将区域
从集合转换为数组的好理由。我怀疑OP不知道区域
,可能只是直接用于它们的目的。你是对的,我修改了我的答案,将其包括在内。