从2D变体写入第二维到Range,而不在VBA中循环

Dja*_*ngo 3 excel vba range variants

我有一个变量变量,并将以下范围值传递给它.

Option Base 1
Dim varEmployees As Variant

varEmployees = Range("A1:B5").Value
Run Code Online (Sandbox Code Playgroud)

此2D变体现在在第一维中具有雇员ID,在第二维中具有雇员名称.所以我们得到类似的东西.

varEmployees(1,1) = 1234    varEmployees(1,2) = John Doe
varEmployees(2,1) = 5678    varEmployees(2,2) = Jane Smith
varEmployees(3,1) = 9012    varEmployees(3,2) = Mary Major
varEmployees(4,1) = 3456    varEmployees(4,2) = Judy Stiles
varEmployees(5,1) = 7890    varEmployees(5,2) = Richard Miles
Run Code Online (Sandbox Code Playgroud)

我想在不使用循环的情况下将第二维仅写回范围但是当我使用以下代码时...

Range("D1:D5") = varEmployees
Run Code Online (Sandbox Code Playgroud)

我只得到实际结果下显示的第一维,但我想要的是我想要的结果(仅第二维).

Actual Results       Desired Results
--------------       ---------------
    1234             John Doe
    5678             Jane Smith
    9012             Mary Major
    3456             Judy Stiles
    7890             Richard Miles
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者有关于我不知道的变体数组的规则.

Tim*_*ams 7

使用的变体数组someRange.Value总是从1开始,所以你真的不需要Option Base 1

这是一个做你想要的方法:

Sub Test()

    Dim a As Variant, b As Variant
    a = Range("A1:B5").Value

    'get a specific column
    b = Application.Index(a, 0, 2) '0="all rows"
    With Range("D10")
        .Resize(UBound(b), 1).Value = b
    End With

    'get a specific row
    b = Application.Index(a, 2, 0) '0="all cols"
    With Range("D21")
        .Resize(1, UBound(b)).Value = b
    End With        
End Sub
Run Code Online (Sandbox Code Playgroud)