Найти тему
VBA Excel с нуля

VBA Excel № 44. Массивы в VBA.

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

Объявление массивов в VBA:

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

Пример объявления массива, который будет хранить пять оценок:

Dim оценки(1 To 5) As Integer

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

В этом примере оценки - это имя массива, (1 To 5) указывает диапазон индексов массива, и As Integer говорит о том, что массив будет содержать целочисленные значения.

Пример с пятью именами и оценками:

Представьте, что у вас есть пять имен и пять оценок от 1 до 5. Мы можем использовать два массива, один для имен и один для оценок.

Dim имена(1 To 5) As String

Dim оценки(1 To 5) As Integer

' Заполняем массив имен

имена(1) = "Анна"

имена(2) = "Борис"

имена(3) = "Виктория"

имена(4) = "Дмитрий"

имена(5) = "Елена"

' Заполняем массив оценок

оценки(1) = 4

оценки(2) = 3

оценки(3) = 5

оценки(4) = 2

оценки(5) = 4

Теперь, используя индексы (те, что в скобках), вы можете получить доступ к конкретным именам и оценкам:

MsgBox "Имя: " & имена(3) & ", Оценка: " & оценки(3)

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

Этот код выведет сообщение: "Имя: Виктория, Оценка: 5". Попробуйте.

Но если данные расположены на листе Excel в координатах ("A2:A6") - имена и ("B2:B6") – оценки (смотри скриншот ниже), а также, например, необходимо через MsgBox вывести поочередно эти данные, то код может выглядеть следующим образом:

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

Option Explicit

Sub test1()

Dim именаRange As Range

Dim оценкиRange As Range

Dim i As Integer

' Указываем диапазоны для имен и оценок

Set именаRange = ThisWorkbook.Sheets("Лист1").Range("A2:A6")

Set оценкиRange = ThisWorkbook.Sheets("Лист1").Range("B2:B6")

For i = 1 To именаRange.Rows.Count

MsgBox "Имя: " & именаRange.Cells(i, 1).Value & ", Оценка: " & оценкиRange.Cells(i, 1).Value

Next i

End Sub

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

В этом коде:

1. Мы определяем диапазоны именаRange и оценкиRange, используя метод Range на листе "Лист1" (вы можете заменить "Лист1" на имя вашего листа).

2. Затем мы используем цикл For для перебора строк в диапазоне и выводим сообщение MsgBox с именем и оценкой для каждой строки.

В связи с тем, что циклы мы ещё на разбирали - коротко о цикле For и этой строке кода:

For i = 1 To именаRange.Rows.Count

Здесь For - это ключевое слово в VBA, которое начинает цикл. В данном случае мы используем цикл для перебора значений от 1 до количества строк в диапазоне именаRange.

i - это переменная-счетчик, которая будет увеличиваться на каждой итерации цикла. На первой итерации i будет равно 1, на второй - 2 и так далее.

To - это ключевое слово, которое указывает на то, до какого значения переменная i должна достигнуть. В данном случае, мы указываем именаRange.Rows.Count, что означает, что цикл будет выполняться до тех пор, пока i не достигнет значения, равного количеству строк в диапазоне именаRange.

именаRange.Rows.Count - это свойство объекта Rows, которое возвращает (то есть подсчитывает) количество строк в диапазоне именаRange.

Таким образом, цикл будет выполняться для каждой строки в диапазоне именаRange, начиная с первой строки (где i = 1) и заканчивая последней строкой (где i примет значение равное количеству строк в диапазоне).

На каждой итерации цикла мы используем значение переменной i для получения соответствующих значений из диапазонов именаRange и оценкиRange.

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

В следующей статье рассмотрим многомерные массивы в VBA.