Функция VBA для транспонирования массива.

Как известно, встроенная в Excel функция листа Transpose имеет ограничения, вследствии чего её не удаётся применять для транспонирования произвольных массивов.

Вот список ограничений  встроенной функции Transpose:

  • Массив не может содержать элементов, длина которых превышает 255 знаков.
  • Массив не может содержать пустые (Null) значения.
  • Количество элементов не может превышать 5461.

Чтобы избежать этих ограничений, рекомендую использовать пользовательскую функцию TransposeArray:

Sub ПримерИспользования()
    ИсходныйМассив = ActiveSheet.UsedRange.Offset(1).Value
    ТранспонированныйМассив = TransposeArray(ИсходныйМассив)
End Sub

Код самой функции:

Function TransposeArray(ByVal arr As Variant) As Variant
    ' Пользовательская функция для транспонирования массива
    Dim tempArray As Variant
    ReDim tempArray(LBound(arr, 2) To UBound(arr, 2), LBound(arr, 1) To UBound(arr, 1))
    For X = LBound(arr, 2) To UBound(arr, 2)
        For Y = LBound(arr, 1) To UBound(arr, 1)
            tempArray(X, Y) = arr(Y, X)
        Next Y
    Next X
    TransposeArray = tempArray
End Function

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Я циклом пользуюсь для создания вертикального массива (двумерного) из горизонтального (в VBA нет средств для транспонирования массива)
Да и куда шустрее то, - создание вертикального массива выполняется моментально (в десятки раз быстрее, чем вывод массива на лист)

Доброго времени суток!
Подскажите пожалуйста, а как лучше вставлять на лист (столбцом) ОДНОМЕРНЫЙ массив, не используя штатную WorksheetFunction.Transpose? На ум приходят только циклы - может есть вариант пошустрее?

В документации указано, вроде бы

Игорь, добрый день.
"Количество элементов не может превышать 5461." - откуда такая цифра? Указана в документации или получена опытным путем?

Если бы стандартный метод не имел ограничений, описанных в статье, - я бы только им и пользовался.
А в универсальных решениях, гораздо удобнее применять этот макрос

для факультатива хорошо чтобы разобраться в транспонировании, но есть стандартный метод для транспонирования.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
          _      _       _____    ____   _ 
__ _ | | __ | |__ |_ _| / ___| (_)
/ _` | | |/ / | '_ \ | | | | _ | |
| (_| | | < | | | | | | | |_| | | |
\__, | |_|\_\ |_| |_| |_| \____| |_|
|_|
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.