Транспонирование диапазонов и двумерных массивов в VBA Excel с помощью метода WorksheetFunction.Transpose. Синтаксис метода, примеры транспонирования.
Метод WorksheetFunction.Transpose
Метод WorksheetFunction.Transpose работает следующим образом: первая строка исходного диапазона (массива) становится первым столбцом нового диапазона (массива), вторая строка становится вторым столбцом и т.д.
Размерность диапазона, которому присваивается транспонированный диапазон, должна соответствовать его размерности. Количество строк нового диапазона должно соответствовать числу столбцов исходного, а количество столбцов нового – числу строк исходного.
Если транспонированный диапазон присваивается массиву, размерность определяется автоматически.
Синтаксис и параметры
1 |
WorksheetFunction.Transpose(Arg1) |
Параметры | Описание |
---|---|
Arg1 | Обязательный параметр. Диапазон ячеек рабочего листа или двумерный массив, который необходимо транспонировать. |
Примеры транспонирования
В примерах ниже транспонируется диапазон «A1:C8» в «A11:H13», как на изображении:
Транспонирование диапазона
Простое транспонирование диапазона:
1 2 3 |
Sub Primer1() Range("A11:H13") = WorksheetFunction.Transpose(Range("A1:C8")) End Sub |
Транспонирование диапазона, когда размеры исходного диапазона неизвестны, а известно, что он начинается с ячейки «A1» и новый диапазон следует разместить ниже исходного через две пустые строки:
1 2 3 4 5 6 7 8 9 |
Sub Primer2() Dim r As Long, c As Long 'Определяем количество строк в исходном диапазоне r = Range("A1").CurrentRegion.Rows.Count 'Определяем количество столбцов в исходном диапазоне c = Range("A1").CurrentRegion.Columns.Count 'В первой половине выражения вычисляем координаты нового диапазона Range(Cells(r + 3, 1), Cells(r + 2 + c, r)) = WorksheetFunction.Transpose(Range(Cells(1, 1), Cells(r, c))) End Sub |
Транспонирование массива
В этом примере двумерный массив создается на основе диапазона ячеек на рабочем листе, и новый массив выгружается на рабочий лист исключительно для наглядности, чтобы результат транспонирования можно было увидеть сразу:
1 2 3 4 5 6 |
Sub primer3() Dim myArr1, myArr2 myArr1 = Range("A1:C8") myArr2 = WorksheetFunction.Transpose(myArr1) Range("A11:H13") = myArr2 End Sub |