ubound vba что это
VBA Excel. Массивы (одномерные, многомерные, динамические)
Массивы в VBA Excel: одномерные, многомерные и динамические. Объявление и использование массивов. Операторы Public, Dim и ReDim. Функции Array, LBound, UBound.
Одномерные массивы
Объявление одномерных (линейных) статических массивов в VBA Excel:
В первом случае публичный массив содержит 10 элементов от 0 до 9 (нижний индекс по умолчанию — 0, верхний индекс — 9), а во втором случае локальный массив содержит 9 элементов от 1 до 9.
По умолчанию VBA Excel считает в массивах нижним индексом нуль, но, при желании, можно сделать нижним индексом по умолчанию единицу, добавив в самом начале модуля объявление «Option Base 1». Вместо верхнего индекса можно использовать переменную.
Многомерные массивы
Объявление многомерных статических массивов в VBA Excel аналогично объявлению одномерных массивов, но с добавлением размерностей дополнительных измерений через запятую:
Третий массив состоит из 10000 элементов — 10×10×10×10.
Динамические массивы
Динамические массивы в VBA Excel, в отличие от статических, объявляются без указания размерности:
Такие массивы используются, когда заранее неизвестна размерность, которая определяется в процессе выполнения программы. Когда нужная размерность массива становится известна, она в VBA Excel переопределяется с помощью оператора ReDim:
Переопределять размерность динамических массивов в процессе работы программы можно неоднократно, как по количеству измерений, так и по количеству элементов в измерении.
С помощью оператора ReDim невозможно изменить обычный массив, объявленный с заранее заданной размерностью. Попытка переопределить размерность такого массива вызовет ошибку компиляции с сообщением: Array already dimensioned (Массив уже измерен).
При переопределении размерности динамических массивов в VBA Excel теряются значения их элементов. Чтобы сохранить значения, используйте оператор Preserve:
Максимальный размер
Размер массива – это произведение длин всех его измерений. Он представляет собой общее количество элементов, содержащихся в данный момент в массиве.
По информации с сайта разработчиков, максимальный размер массивов зависит от операционной системы и доступного объема памяти. Использование массивов, размер которых превышает объем доступной оперативной памяти компьютера, приводит к снижению скорости, поскольку системе необходимо выполнять запись данных и чтение с диска.
Использование массивов
Приведу два примера, где не обойтись без массивов.
1. Как известно, функция Split возвращает одномерный массив подстрок, извлеченных из первоначальной строки с разделителями. Эти данные присваиваются заранее объявленному строковому (As String) одномерному динамическому массиву. Размерность устанавливается автоматически в зависимости от количества подстрок.
2. Данные в массивах обрабатываются значительно быстрее, чем в ячейках рабочего листа. Построчную обработку информации в таблице Excel можно наблюдать визуально по мерцаниям экрана, если его обновление (Application.ScreenUpdating) не отключено. Чтобы ускорить работу кода, можно значения из диапазона ячеек предварительно загрузить в динамический массив с помощью оператора присваивания (=). Размерность массива установится автоматически. После обработки данных в массиве кодом VBA полученные результаты выгружаются обратно на рабочий лист Excel. Обратите внимание, что загрузить значения в диапазон ячеек рабочего листа через оператор присваивания (=) можно только из двумерного массива.
Функции Array, LBound, UBound
Функция Array
Функция Array возвращает массив элементов типа Variant из первоначального списка элементов, перечисленных через запятую. Нумерация элементов в массиве начинается с нуля. Обратиться к элементу массива можно, указав в скобках его номер (индекс).
Функция UBound
Возвращает тип длинных данных, содержащий самый большой доступный подскрипник для указанных размеров массива.
Синтаксис
UBound(arrayname, [ dimension ])
Синтаксис функции UBound имеет эти части.
Part | Описание |
---|---|
имя массива | Обязательный. Имя переменной массива; соответствует стандарту соглашений об именовании переменных. |
размер | Необязательный аргумент. Variant (Long). Все число, указывающее, какая верхняя граница измерения возвращается. Используйте 1 для первого измерения, 2 для второго и так далее. Если измерение опущено, предполагается 1. |
Примечания
Функция UBound используется с функцией LBound для определения размера массива. Используйте функцию LBound для поиска нижнего предела измерения массива.
UBound возвращает следующие значения для массива с этими измерениями:
Statement | Возвращаемое значение |
---|---|
UBound(A, 1) | 100 |
UBound(A, 2) | 3 |
UBound(A, 3) | 4 |
Пример
В этом примере функция UBound используется для определения самого большого доступного индекса указанного измерения массива.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Information. UBound(Array, Int32) Метод
Определение
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает наибольший доступный индекс для указанной размерности массива.
Параметры
Обязательный. Массив данных любого типа. Массив, в котором осуществляется поиск наибольшего индекса измерения.
Возвращаемое значение
Исключения
Примеры
В следующем примере функция используется UBound для определения наибольшего доступного индекса для указанного измерения массива.
Комментарии
Так как индексы массива начинаются с 0, длина измерения больше, чем максимальный доступный индекс для этого измерения.
Для массива со следующими измерениями UBound возвращает значения, приведенные в следующей таблице:
Вызов функции UBound | Возвращаемое значение |
---|---|
UBound(a, 1) | 100 |
UBound(a, 2) | 5 |
UBound(a, 3) | 4 |
Можно использовать UBound для определения общего количества элементов в массиве, но необходимо скорректировать возвращаемое значение, чтобы учесть тот факт, что индексы начинаются с 0. В следующем примере вычисляется общий размер массива a в предыдущем примере:
Использование массивов и коллекций для управления данными
Работа с элементами массива
В нашем массиве Employees это приведет к следующему результату.
В нашем массиве Scoreboard это приведет к следующему результату.
Эту методику индексирования можно использовать для присвоения и получения значений элементов массива.
Создание массива фиксированной длины для хранения температур
В следующем упражнении одномерный массив с именем Temperatures используется для записи максимальных ежедневных температур в течение недели. Эта программа демонстрирует, как можно использовать массив для хранения и обработки группы связанных значений в форме. Переменная массива Temperatures объявляется в верхней части формы, а затем с помощью функции InputBox в цикле For Next (см. «Циклы и таймеры» ) этому массиву присваиваются температуры. Для указания каждого из элементов массива используется счетчик цикла. Затем с помощью цикла For
Next и объекта текстового поля содержимое массива отображается в форме. Также вычисляется и отображается «средняя» максимальная температура.
Функции LBound и UBound
Массив фиксированной длины
Установите для формы и ее объектов следующие свойства.
Объект | Свойство | Установка |
---|---|---|
TextBox1 | ScrollBars | Vertical |
Text | пустой (empty) | |
Button1 | Text | «Ввести температуры» |
Button2 | Text | «Отобразить температуры» |
Form1 | Text | «Фиксированный массив температур» |
Ваша форма должна выглядеть примерно так.
Прокрутите программный код формы в самый верх, и прямо под тэгом «Windows Form Designer generated code» («Код, автоматически созданный конструктором форм Windows») введите следующее объявление массива:
Этот оператор создает массив с именем Temperatures (имеющий тип Single ), который содержит семь элементов, пронумерованных от 0 до 6. Так как этот массив был объявлен в верхней части формы, он будет доступен во всех процедурах событий формы.
Чтобы запросить у пользователя температуры и загрузить ввод в массив, введите следующие операторы программы:
Введите в процедуре события Button2_Click операторы программы:
Чтобы запустить программу, щелкните на кнопке Start (Начать).
Щелкните на кнопке Ввести температуры, а затем при появлении запросов от функции InputBox введите семь различных температур. Диалоговое окно функции InputBox выглядит так.
После того, как вы введете температуры, щелкните на кнопке Отобразить температуры. Visual Basic отобразит все температуры в текстовом поле и напечатает внизу их среднее значение. Ваш экран должен выглядеть примерно так.