Если размер вашего массива увеличивается, и вы не хотите, чтобы установить размер массива, вы можете использовать ReDim ключевое слово. Excel VBA затем изменяет размер массива автоматически.

Добавьте несколько чисел в столбце A.

Dynamic Array in Excel VBA

Поместите командную кнопку на листе и добавьте строки следующего кода:

  1. Во-первых, мы объявляем массив с именем номера. Кроме объявить две переменные типа Integer. Один названный размер и один с именем I.

Dim numbers() As Integer, size As Integer, i As Integer

Примечание: массив не имеет размера еще. число, размер и я случайно выбраны здесь, вы можете использовать любые имена. Не забывайте ссылаться на эти имена в остальной части кода.

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

size = WorksheetFunction.CountA(Worksheets(1).Columns(1))
  1. Теперь мы знаем, размер массива, и мы можем redimension его. Добавьте следующую строку кода:

ReDim numbers(size)
  1. Далее мы инициализируем каждый элемент массива. Мы используем цикл.

For i = 1 To size

numbers(i) = Cells(i, 1).Value

Next i
  1. Мы отобразить последний элемент массива с помощью MsgBox.

MsgBox numbers(size)
  1. Закройте редактор Visual Basic и нажмите кнопку команды на листе.

Результат:

Last Element of the Array

  1. Теперь ясно, почему это называется динамическим массивом, добавить номер столбца A.

Add Number

  1. Снова нажмите кнопку управления.

Dynamic Array Result

Вывод: Excel VBA автоматически изменен размер этого динамического массива.

  1. При использовании ReDim ключевого слова, вы удалите все существующие данные в настоящее время хранится в массиве. Например, добавьте следующие строки кода к ранее созданному коду:

ReDim numbers(3)

MsgBox numbers(1)

Результат:

Without Preserve

Массив пуст.

  1. Если вы хотите сохранить данные в существующем массиве, когда вы redimension его, используйте ключевое слово Preserve.

ReDim Preserve numbers(3)

MsgBox numbers(1)

Результат:

With Preserve