繁体   English   中英

Excel VBA-无法选择多个非连续列范围

[英]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

来自Contextures Excel示例数据的示例数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM