VBA - объявление (затемнение), создание и инициализация переменной массива

В этом руководстве будет показано, как объявлять (затемнять), создавать и инициализировать переменные массива в VBA.

Что такое переменная массива VBA?

Переменную массива VBA можно рассматривать как группу переменных, хранящихся под одним и тем же именем и имеющих один и тот же тип данных. Массив может хранить текст, числа или объекты.

Вы ссылаетесь на элемент в массиве, используя его порядковый номер.

Вы можете объявить переменную массива так же, как и любую другую переменную, используя ключевое слово Dim, Static, Public или Private.

Статические массивы

Есть 2 типа массивов - статические и динамические. Статический массив объявляется с размером, указанным при первоначальном объявлении массива. Его также называют фиксированным массивом.

1 Dim intA (4) как целое число

Вышеупомянутый массив объявлен с использованием оператора Dim на уровне процедуры или модуля, а размер массива равен 5, поскольку мы не объявили значение LBound для массива.

Нет, это не опечатка! Размер массива равен 5, несмотря на то, что в массив введено 4. Это связано с тем, что индексы массива автоматически начинаются с нуля.

Индексы массивов

Индексы массива автоматически начинаются с нуля, если только Вариант База 1 объявлен в верхней части вашего модуля кода.

Если Вариант База 1 объявлен, тогда массивы автоматически начнутся с 1.

Однако я считаю, что такое объявление переменных проблематично. Рецензенты кода могут не знать, что массивы начинаются с нуля или объявления Option Base 1.

Вместо этого я предпочитаю явно объявлять начальную и конечную позиции массивов:

1 Dim intA (от 2 до 5) как целое число

Обратите внимание, что когда вы это сделаете, вы можете начать массив с любого числа (а не только с 1 или 0).

Динамические массивы

Переменная динамического массива - это массив, размер которого можно изменять во время выполнения. Вы объявляете динамические переменные без размера.

1 Dim intA () как целое число

Вы можете использовать оператор ReDim, чтобы указать размер массива после создания массива.

1 ReDim intA (2)

Вы можете изменить размер динамического массива в любое время. Однако при использовании оператора ReDim все существующие значения стираются. Чтобы сохранить существующие значения массива, используйте ReDim Preserve вместо.

1 ReDim Preserve intA (2)

Вы можете объявить динамический массив на уровне процедуры, модуля или глобального уровня, но вы можете использовать оператор ReDim только внутри процедуры.

Варианты массивов

Вариантные массивы - это динамические массивы, с которыми проще работать.

1 Dim varNames ()

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

Как мы увидим ниже, вы можете инициализировать вариантные массивы с помощью функции массива (не нужно предварительно изменять размер массивов)!

Объявление модуля и публичных массивов

Как показано выше, массивы могут быть объявлены внутри процедур для использования в этой процедуре:

1234 Подложка StaticArray ()'объявить массив со значением LBound, равным 1, и значением UBound, равным 4Dim IntA (от 1 до 4) как целое числоКонец подписки

Но они также могут быть объявлены на модульном или глобальном уровне.

1234567 Вариант Явный'объявить массив со значением LBound, равным 1, и значением UBound, равным 4Dim IntA (от 1 до 4) как целое числоПодложка StaticArray ()Конец подписки

В этом примере переменную массива можно вызвать в любом месте этого модуля кода. Вместо этого вы можете объявить публичный массив, который можно использовать в вашем проекте VBA (см. Следующий раздел).

Объявление публичного массива

Вы объявляете публичный статический массив так же, как объявляете публичную переменную.

1 Public strNames (3) как строка

Это объявление должно быть в верхней части вашего модуля, ниже Option Explicit. Затем его можно было бы использовать во всем вашем проекте VBA в любом модуле или процедуре.

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

Инициализировать массивы

Вы можете присвоить значения статическому массиву следующим образом.

1234567891011 Подложка StaticArray ()'объявить массив со значением LBound, равным 1, и значением UBound, равным 4Dim IntA (от 1 до 4) как целое число'инициализировать массивIntA (1) = 10IntA (2) = 20ИнтА (3) = 30ИнтА (4) = 40'показать результат позиции 2 массива в ближайшем окнеОтладка.Печать IntA (2)Конец подписки

Если вы запустите описанную выше процедуру, значение 20 отобразится в ближайшем окне.

Вы также можете присвоить значения динамическому массиву таким же образом.

12345678910111213 Sub DynamicArray ()'объявить динамический массив, но без привязанных значенийDim IntA () как целое число'инициализировать массивReDim IntA (от 1 до 4)IntA (1) = 10IntA (2) = 20ИнтА (3) = 30ИнтА (4) = 40'показать результат позиции 2 массива в ближайшем окнеОтладка.ПечатьIntA (2)Конец подписки

Функция массива

Тем не мение, только с массивом вариантов, вы можете использовать функцию массива, что может быть проще, чем использование стандартного метода.

12 'заполнить массивintA () = Массив (10, 20, 30, 40)

Заполнить массив с помощью цикла

Вы также можете заполнять массивы, просматривая диапазон ячеек в Excel.

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'объявить массивDim strNames () как строка'объявить целое число для подсчета строк в диапазонеDim n как целое число'объявить целое число для циклаDim i как целое число'подсчитываем строки в диапазонеn = Диапазон ("A1", Диапазон ("A1"). Конец (xlDown)). Rows.Count'уменьшите размер массива до количества строк в диапазоне.ReDim strNames (n)Для i = 0 К nstrNames (i) = Диапазон ("A1"). Смещение (i + 1, 0)Далее я'показать значения в массивеПрисоединение к MsgBox (strNames ())Конец подписки

Повторно инициализировать массивы

Вы можете повторно инициализировать свой массив на любом этапе вашего кода, но тогда вы потеряете исходное значение, содержащееся в этой позиции в вашем массиве.

1234567891011121314 Подложка StaticArray ()'объявить массив со значением LBound, равным 1, и значением UBound, равным 4Dim IntA (от 1 до 4) как целое число'инициализировать массивIntA (1) = 10IntA (2) = 20ИнтА (3) = 30ИнтА (4) = 40'показать результат позиции 2 массива в ближайшем окнеОтладка.Печать IntA (2)'снова инициализировать массивintA (2) = 200Отладка.Печать IntA (2)Конец подписки

В приведенном выше примере статический массив сохранит все значения, кроме значения в позиции 2 - это значение изменится на 200.

Использование ReDim

Если вы используете динамический массив, оператор ReDim используется для установки размера вашего массива. Вы можете впоследствии использовать оператор ReDim в своем коде, чтобы изменять размер массива столько раз, сколько вам нужно. Строка кода ниже повторно инициализирует массив intA, чтобы он имел размер 2 (помните - индекс массива начинается с 0!)

1 ReDim intA (1) как целое число

Таким образом, код, включающий оператор ReDim, будет выглядеть, как в примере ниже.

1234567891011121314151617 Sub TestDynamicArray ()'объявить массивDim intA () как целое числоReDim intA (2)'заполняем массив числамиintA (0) = 2intA (1) = 5intA (2) = 9'показать число в позиции 1Отладка.Печать intA (1)'изменить размер массива, чтобы изменить размерReDim intA (3)intA (0) = 6intA (1) = 8'на этот раз показать число в позиции 1Отладка.Печать intA (1)Конец подписки

Если вы запустите вышеуказанную процедуру, значение 5 будет отображаться в непосредственном окне, а затем будет отображаться значение 8 после того, как мы изменим размер массива с помощью ReDim и повторно заполнили его. Однако, поскольку мы не заполнили IntA (2) и не использовали Re-Dim Preserve, значение в этой позиции в массиве будет удалено, а позиции 3 и 4 в массиве будут нулевыми.

Использование ReDim Preserve

Если мы используем ReDim Preserve, он сохранит исходные значения, содержащиеся в массиве.

1234567891011121314151617 Sub TestDynamicArray ()'объявить массивDim intA () как целое числоReDim intA (2)'заполняем массив числамиintA (0) = 2intA (1) = 5intA (2) = 9'показать число в позиции 2Отладка.Печать intA (2)'переименовывать массивReDim intA (3)intA (0) = 6intA (1) = 8'снова показать число в позиции 2Отладка.Печать intA (2)Конец подписки

В обоих окнах сообщений, показанных выше, будет отображаться число 9, поскольку оператор ReDim Preserve сохранил это значение в этой позиции.

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave