Многомерные массивы - это как таблицы или сетки, где вы можете хранить данные в нескольких измерениях. В обычных массивах у вас есть только одно измерение (например, список имен или оценок), но многомерные массивы позволяют создавать более сложные структуры данных.
Объявление многомерных массивов в VBA:
Чтобы объявить многомерный массив в VBA, вам нужно указать количество измерений и размер каждого измерения.
Пример объявления двумерного массива для хранения оценок учеников:
Dim оценки(1 To 5, 1 To 3) As Integer
В этом примере оценки - это имя массива, (1 To 5, 1 To 3) указывает, что у нас два измерения: первое измерение идет от 1 до 5 (пять учеников), а второе измерение идет от 1 до 3 (три предмета).
Пример с многомерным массивом (в данном случае это двухмерный массив) оценок:
Допустим, у нас есть пять учеников и три предмета, и мы хотим хранить оценки каждого ученика по каждому предмету.
Наполнить массив можно следующим кодом:
Sub test()
Dim оценки(1 To 5, 1 To 3) As Integer
' Заполняем массив оценок
оценки(1, 1) = 4
оценки(1, 2) = 3
оценки(1, 3) = 5
оценки(2, 1) = 3
оценки(2, 2) = 4
оценки(2, 3) = 3
оценки(3, 1) = 5
оценки(3, 2) = 2
оценки(3, 3) = 4
оценки(4, 1) = 2
оценки(4, 2) = 3
оценки(4, 3) = 4
оценки(5, 1) = 4
оценки(5, 2) = 3
оценки(5, 3) = 5
Dim оценка As Integer
оценка = оценки(3, 2)
MsgBox оценка
End Sub
В этом примере значение оценки(3, 2) будет представлять оценку третьего ученика по второму предмету (а это Виктория и у неё по физике двойка).
Но давайте представим, что учеников 30, а предметов 10, никаких сил не хватит таким образом загонять в массив оценки учеников. Как быть?
Тогда можно воспользоваться циклом For Each (прохождение по всем ячейкам указанного диапазона). Вот пример кода:
Sub test1()
Dim оценки(1 To 5, 1 To 3) As Integer
Dim ячейкаОценка As Range
For Each ячейкаОценка In ThisWorkbook.Worksheets("Лист1").Range("B2:D6")
оценки(ячейкаОценка.Row - 1, ячейкаОценка.Column - 1) = ячейкаОценка.Value
Next ячейкаОценка
Dim оценка As Integer
оценка = оценки(3, 2)
MsgBox оценка
End Sub
Процедура стала намного меньше. Заметили?
Давайте разберем этот код по шагам:
1. 'Dim оценки(1 To 5, 1 To 3) As Integer': Здесь объявляется двумерный массив с именем 'оценки', который будет содержать оценки учеников. Этот массив имеет 5 строк (учеников) и 3 столбца (предмета).
2. 'Dim ячейкаОценка As Range': Объявляется переменная 'ячейкаОценка' типа 'Range', которая будет использоваться для перебора ячеек в диапазоне.
3. 'For Each ячейкаОценка In ThisWorkbook.Worksheets("Лист1"). Range("B2:D6")': Здесь начинается цикл, который перебирает каждую ячейку в диапазоне "B2:D6" на листе "Лист1" в текущей книге. Для каждой ячейки в этом диапазоне выполняется следующее действие.
4. 'оценки(ячейкаОценка. Строка - 1, ячейкаОценка. Столбец - 1) = ячейкаОценка. Value': Эта строка присваивает значение текущей ячейки переменной 'ячейкаОценка' элементу массива 'оценки' с помощью индексов, вычисленных из номера строки и столбца ячейки. Так как массивы в VBA индексируются с 1, мы вычитаем 1 из номера строки и столбца, чтобы получить правильные индексы массива.
5. 'Next ячейкаОценка' закрываем цикл
6. 'Dim оценка As Integer': Объявляется переменная 'оценка', которая будет использоваться для хранения значения оценки ученика.
7. 'оценка = оценки(3, 2)': Значение оценки ученика 3 по предмету 2 извлекается из массива 'оценки' и присваивается переменной 'оценка'.
8. 'MsgBox оценка': Открывается диалоговое окно с помощью функции 'MsgBox', которое показывает значение переменной 'оценка' (а это Виктория и у неё по физике двойка).
Многомерные массивы позволяют хранить данные в более сложных структурах, чем простые одномерные массивы. Они полезны, когда вам нужно хранить данные, организованные в виде таблиц или сеток, такие как оценки учеников по разным предметам или координаты в трехмерном пространстве. Используя индексы для каждого измерения, вы можете получать доступ к данным в многомерных массивах.
В следующей статье рассмотрим динамические массивы в VBA.