[英]Excel VBA - Unable to select multiple non contiguos column ranges
我正在尝试将一些不连续的列(例如A列,C列,E列)复制到动态数组中。 但是,使用VBA Application.Union
方法时,似乎仅复制了连续范围,而保留了非连续范围。
我尝试复制连续的列(A,B,C,D,E),该列按预期工作,但非连续的列(A,C,E)则不行。
有人可以协助我吗? 谢谢。
Sub TestFunction()
Dim TempArray() As Variant
Dim rngUnion As Range
With ThisWorkbook.Worksheets(2)
Set rngUnion = Application.Union(.Range("A1:A10"), .Range("C1:C10"), .Range("E1:E10"))
End With
TempArray = rngUnion
End Sub
您没有提到要对数组执行的操作,所以我不确定这是否对您有用。 但是,为什么不使用数组rngUnion
直接使用rngUnion
,并根据需要遍历其Areas
集合呢?
例如,此功能:
Sub TestFunction2()
Dim rngUnion As Range
Dim area As Range
With ThisWorkbook.Worksheets(2)
Set rngUnion = Application.Union(.Range("A1:A10"), .Range("C1:C10"), .Range("E1:E10"))
End With
For Each area In rngUnion.Areas
Debug.Print area.Address
Next area
Set area = Nothing
Set rngUnion = Nothing
End Sub
返回此输出:
$A$1:$A$10
$C$1:$C$10
$E$1:$E$10
如果确实需要数组,则可以使用同一循环将单个Areas
(即Ranges
)添加到数组。
蒂姆·威廉姆斯(Tim Williams)已经回答了您的问题。 我只是想演示一种从多个非连续范围创建数组的好方法。 这项工作的关键是所有范围都具有1列和相同数量的行。
getArrayFromRanges
从传递给它的每个范围中获取值的数组,并使用Transpose将其从2D数组转换为1D数组。 这些1D Temp阵列中的每一个都添加到1D Data阵列中。 然后使用转置将数据从1D数组或1D数组转换为2D数组。
Sub TestFunction()
Dim Data
With Worksheets(2)
Data = getArrayFromRanges(.Range("A1:A10"), .Range("C1:C10"), .Range("E1:E10"))
.Range("A12").Resize(UBound(Data, 1), UBound(Data, 2)) = Data
End With
End Sub
Function getArrayFromRanges(ParamArray Sources())
Dim Data, Temp, v
Dim x As Long
ReDim Data(UBound(Sources))
For Each v In Sources
Temp = Application.Transpose(v)
Data(x) = Temp
x = x + 1
Next
getArrayFromRanges = Application.Transpose(Data)
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.