Запись 2-го измерения в диапазон от 2D варианта без зацикливания в VBA
У меня есть переменная variant, и я передаю ей следующие значения диапазона таким образом.
Option Base 1
Dim varEmployees As Variant
varEmployees = Range("A1:B5").Value
Этот двумерный вариант теперь имеет идентификаторы сотрудников в 1-м измерении и имена сотрудников во 2-м. Таким образом, мы получаем что-то вроде следующего.
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
Я хочу записать 2-е измерение только обратно в диапазон без использования цикла, но когда я использую следующий код...
Range("D1:D5") = varEmployees
Я получаю только 1-е измерение, как показано в разделе фактические результаты, но то, что я хочу, - это мои желаемые результаты (только 2-е измерение).
Actual Results Desired Results
-------------- ---------------
1234 John Doe
5678 Jane Smith
9012 Mary Major
3456 Judy Stiles
7890 Richard Miles
Есть ли способ сделать это или есть правило о вариантных массивах, о котором я не знаю.
1 ответ:
Вариантные массивы, полученные с помощью
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