我有一个变量变量,并将以下范围值传递给它。
Option Base 1
Dim varEmployees As Variant
varEmployees = Range("A1:B5").Value
此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
我想在不使用循环的情况下将第二个维度写回范围,但是当我使用以下代码时...
Range("D1:D5") = varEmployees
我只获得实际结果下显示的第一维,但我想要的是我想要的结果(仅第二维)。
Actual Results Desired Results
-------------- ---------------
1234 John Doe
5678 Jane Smith
9012 Mary Major
3456 Judy Stiles
7890 Richard Miles
有没有办法做到这一点,或者是否有关于我不知道的变体数组的规则。
答案 0 :(得分: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