Найти в Дзене
VBA Excel с нуля

VBA Excel № 46. Динамические массивы в VBA.

Динамические массивы - это мощный инструмент в языке программирования VBA, который позволяет создавать и управлять массивами переменной длины. В этой статье мы рассмотрим, что такое динамические массивы, как их использовать и какие преимущества они предоставляют. Что такое динамические массивы? Массивы в VBA - это коллекции элементов одного типа данных, объединенных под одним именем. Обычно массивы имеют фиксированную длину, которая определяется заранее. Динамические массивы, напротив, позволяют менять свою длину в процессе выполнения программы. Почему использовать динамические массивы? Динамические массивы предоставляют несколько преимуществ: 1. Гибкость: Вы можете добавлять и удалять элементы в массиве по мере необходимости, без заранее заданной фиксированной длины. 2. Экономия памяти: Массивы занимают память только на фактические элементы, что позволяет оптимизировать использование ресурсов. 3. Удобство: Динамические массивы упрощают обработку больших объемов данных, так как не треб

Динамические массивы - это мощный инструмент в языке программирования VBA, который позволяет создавать и управлять массивами переменной длины. В этой статье мы рассмотрим, что такое динамические массивы, как их использовать и какие преимущества они предоставляют.

Что такое динамические массивы?

Массивы в VBA - это коллекции элементов одного типа данных, объединенных под одним именем. Обычно массивы имеют фиксированную длину, которая определяется заранее. Динамические массивы, напротив, позволяют менять свою длину в процессе выполнения программы.

Почему использовать динамические массивы?

Динамические массивы предоставляют несколько преимуществ:

1. Гибкость: Вы можете добавлять и удалять элементы в массиве по мере необходимости, без заранее заданной фиксированной длины.

2. Экономия памяти: Массивы занимают память только на фактические элементы, что позволяет оптимизировать использование ресурсов.

3. Удобство: Динамические массивы упрощают обработку больших объемов данных, так как не требуют заранее известного размера.

Как создать динамический массив?

Для создания динамического массива в VBA используется функция ReDim, которая позволяет изменять размер массива. Рассмотрим пример создания динамического массива чисел:

Sub CreateDynamicArray()

Dim DynamicArray() As Integer

Dim i As Integer

ReDim DynamicArray(0 To 4) ' Начальное задание размера

'индекс массива начинается с 0

For i = 0 To 4

DynamicArray(i) = i * 2

Next i

' Вначале i равно 0*2, далее 1*2 и...

' Теперь массив содержит: 0, 2, 4, 6, 8

End Sub

Скриншот с моего ноутбука
Скриншот с моего ноутбука

📌 Скачать файл пример, можно в конце статьи.

В данном примере мы сначала создаем массив DynamicArray с начальным размером 5 элементов. Затем мы заполняем его элементами, умножая индекс на 2. Содержание массива видно в окне отладки “Locals” (как работать с окнами отладки будет рассмотрено в статье № 49).

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Добавление элементов в динамический массив

Чтобы добавить новый элемент в динамический массив, мы снова используем ReDim, но с указанием нового размера массива:

Sub AddElementToDynamicArray()

Dim DynamicArray() As Integer

Dim i As Integer

ReDim DynamicArray(0 To 2) ' Начальное задание размера

For i = 0 To 2

DynamicArray(i) = i * 3

Next i

' Теперь массив содержит: 0, 3, 6

ReDim Preserve DynamicArray(0 To 3) ' Изменение размера с сохранением данных

DynamicArray(3) = 48

' Теперь массив содержит: 0, 3, 6, 48

End Sub

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Давайте разберем этот код по шагам:

1. Dim DynamicArray() As Integer: В этой строке мы объявляем переменную DynamicArray как динамический массив целых чисел.

2. ReDim DynamicArray(0 To 2): Здесь мы задаем начальный размер массива. Массив будет иметь три элемента, индексы от 0 до 2.

3. For i = 0 To 2: Этот цикл For проходит через индексы от 0 до 2.

4. DynamicArray(i) = i * 3: В этой строке мы присваиваем элементам массива значения, умножая индекс на 3. Таким образом, первый элемент будет 0, второй - 3, третий - 6.

5. ReDim Preserve DynamicArray(0 To 3): Это особенность динамических массивов. Мы используем ReDim Preserve, чтобы изменить размер массива, но при этом сохранить уже существующие значения. Теперь массив будет иметь размер 4 элемента.

6. DynamicArray(3) = 48: Мы присваиваем четвертому элементу массива значение 48.

7. Закомментированная строка "Теперь массив содержит: 0, 3, 6, 48": Это объяснение текущего содержания массива.

Таким образом, после выполнения этого макроса, массив будет содержать числа 0, 3, 6 и 48.

Коротко: в этом примере мы сначала создаем массив с тремя элементами, а затем с помощью ReDim Preserve расширяем его до четырех элементов и добавляем новый элемент. Содержание массива видно в окне отладки “Locals”.

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Удаление элементов из динамического массива

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

Sub RemoveElementFromDynamicArray()

Dim DynamicArray() As Integer

Dim i As Integer

Dim indexToRemove As Integer

ReDim DynamicArray(0 To 3)' Начальное задание размера

For i = 0 To 3

DynamicArray(i) = i * 4

Next i

indexToRemove = 1

For i = indexToRemove To UBound(DynamicArray) - 1

DynamicArray(i) = DynamicArray(i + 1)

Next i

ReDim Preserve DynamicArray(0 To UBound(DynamicArray) - 1)

' Уменьшение размера массива

' Теперь массив содержит: 0, 8, 12

End Sub

Скриншот с моего ноутбука
Скриншот с моего ноутбука

Разберем пошагово код макроса RemoveElementFromDynamicArray, чтобы понять, что он делает:

1. ReDim DynamicArray(0 To 3): Создает массив DynamicArray с начальным размером 4 элемента (индексы 0, 1, 2, 3).

2. For i = 0 To 3: Цикл заполняет массив числами, умноженными на 4. После этого массив будет содержать: 0, 4, 8, 12.

3. indexToRemove = 1: Указывает индекс элемента, который нужно удалить (в данном случае, это элемент с индексом 1).

4. For i = indexToRemove To UBound(DynamicArray) - 1: Цикл перемещает элементы массива влево, начиная с индекса indexToRemove, для "удаления" элемента. В данном случае, элемент с индексом 1 (значение 4) будет перезаписан значением элемента с индексом 2 (значение 8), и элемент с индексом 2 будет перезаписан значением элемента с индексом 3 (значение 12).

5. ReDim Preserve DynamicArray(0 To UBound(DynamicArray) - 1): Уменьшает размер массива на один элемент, фактически удаляя последний элемент.

В результате, после выполнения этого кода массив будет содержать: 0, 8, 12. Элемент с индексом 1 (значение 4) был удален.

Динамические массивы предоставляют гибкость и удобство при работе с переменными объемами данных в VBA. Используя функцию ReDim, вы можете создавать, добавлять и удалять элементы в массиве по мере необходимости. Это поможет вам более эффективно управлять данными и создавать более гибкие программы.

СКАЧАТЬ ФАЙЛ ПРИМЕР

В следующей статье рассмотрим окно отладки процедуры "Immediate" Window в VBA.