Массив представляет собой набор данных одного типа. Например, объявим массив элементов типа Integer:

Здесь мы объявили массив из 6 элементов типа Integer. По умолчанию всем шести элементам в массиве присваивается 0. Затем первым четырем элементам массива мы присваиваем некоторые значения. Обратите внимание, что индексация в массиве начинается с нуля. При этом мы не можем выйти за рамки установленной длины массива в 6 элементов. А следующий код вызовет исключение ArrayIndexOutOfRange, поскольку восьмого элемента в массиве не существует, в нем определено только 6 элементов:

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

В таком случае нам его еще предстоит инициализировать. Мы это можем сделать так:

В данном примере мы c помощью ключевого слова New указываем, что хотим создать новый объект. Также указываем размер массива. А фигурные скобки служат для инициализации массива. Однако нам необязательно присваивать все значения массива после объявления. Мы можем все сделать уже при объявлении массива:

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

В первой главе мы уже говорили, что тип переменной может выводиться компилятором автоматически. То же самое применимо и к массиву. Например:

Кроме размера массив характеризуется таким понятием как размерность (dimension). В предыдущих примерах мы использовали одномерные массивы. Но массивы бывают и многомерными. Например:

Здесь мы создали двухмерный массив, который можно представить в виде таблицы:

Массивы в VBA Excel: одномерные, многомерные и динамические. Объявление и использование массивов. Операторы Public, Dim и ReDim. Функции Array, LBound, UBound.

Массивы — это множества однотипных элементов, имеющих одно имя и отличающиеся друг от друга индексами. Они могут быть одномерными (линейными), многомерными и динамическими. Массивы в VBA Excel, как и другие переменные, объявляются с помощью операторов Dim и Public. Для изменения размерности динамических массивов используется оператор ReDim. Массивы с заранее объявленной размерностью называют статическими.

Одномерные массивы

Объявление одномерных (линейных) статических массивов в VBA Excel:

В первом случае публичный массив содержит 10 элементов от 0 до 9 (нижний индекс по умолчанию — 0, верхний индекс — 9), а во втором случае локальный массив содержит 9 элементов от 1 до 9.

По умолчанию VBA Excel считает в массивах нижним индексом нуль, но, при желании, можно сделать нижним индексом по умолчанию единицу, добавив в самом начале модуля объявление «Option Base 1». Вместо верхнего индекса можно использовать переменную.

Многомерные массивы

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

Третий массив состоит из 10000 элементов — 10×10×10×10.

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

Динамические массивы в VBA Excel, в отличие от статических, объявляются без указания размерности:

Такие массивы используются, когда заранее неизвестна размерность, которая определяется в процессе выполнения программы. Когда нужная размерность массива становится известна, она в VBA Excel переопределяется с помощью оператора ReDim:

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

С помощью оператора ReDim невозможно изменить обычный массив, объявленный с заранее заданной размерностью. Попытка переопределить размерность такого массива вызовет ошибку компиляции с сообщением: Array already dimensioned (Массив уже измерен).

При переопределении размерности динамических массивов в VBA Excel теряются значения их элементов. Чтобы сохранить значения, используйте оператор Preserve:

Обратите внимание!
Переопределить с оператором Preserve можно только последнюю размерность динамического массива. Это недоработка разработчиков, которая сохранилась и в VBA Excel 2016. Без оператора Preserve можно переопределить все размерности.

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

Приведу два примера, где не обойтись без массивов.

1. Как известно, функция Split возвращает одномерный массив подстрок, извлеченных из первоначальной строки с разделителями. Эти данные присваиваются заранее объявленному строковому (As String) одномерному динамическому массиву. Размерность устанавливается автоматически в зависимости от количества подстрок.

2. Данные в массивах обрабатываются значительно быстрее, чем в ячейках рабочего листа. Построчную обработку информации в таблице Excel можно наблюдать визуально по мерцаниям экрана, если его обновление (Application.ScreenUpdating) не отключено. Чтобы ускорить работу кода, можно значения из диапазона ячеек предварительно загрузить в динамический массив с помощью оператора присваивания (=). Размерность массива установится автоматически. После обработки данных в массиве кодом VBA полученные результаты выгружаются обратно на рабочий лист Excel. Обратите внимание, что загрузить значения в диапазон ячеек рабочего листа через оператор присваивания (=) можно только из двумерного массива.

Функции Array, LBound, UBound

Функция Array

Функция Array возвращает массив элементов типа Variant из первоначального списка элементов, перечисленных через запятую. Нумерация элементов в массиве начинается с нуля. Обратиться к элементу массива можно, указав в скобках его номер (индекс).

Скопируйте код в модуль VBA Excel и запустите его на выполнение. Информационное сообщение MsgBox покажет значения массива, извлеченные по индексу.

Функция LBound

Функция LBound возвращает значение типа Long, равное наименьшему (нижнему) доступному индексу в указанном измерении массива.
Синтаксис:
LBound (arrayname[, dimension])

  • arrayname — это имя переменной массива, является обязательным аргументом;
  • dimension — это номер измерения массива, необязательный аргумент, по умолчанию принимает значение 1.

Наименьший индекс по-умолчанию может быть равен 0 или 1 в зависимости от настроек оператора Option Base. Нижняя граница архива, полученного с помощью функции Array, всегда равна 0.

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

Функция UBound

Функция UBound возвращает значение типа Long, равное наибольшему (верхнему) доступному индексу в указанном измерении массива.
Синтаксис:
UBound( arrayname[, dimension])

  • arrayname — это имя переменной массива, является обязательным аргументом;
  • dimension — это номер измерения массива, необязательный аргумент, по умолчанию принимает значение 1.

Функция UBound используется вместе с функцией LBound для определения размера массива.

Скопируйте код в модуль VBA Excel и запустите его на выполнение. Информационное сообщение MsgBox покажет значения наименьшего и наибольшего индекса переменной массива a.

Очистка (обнуление) массивов

Первый способ

Очистить любой массив, статический или динамический, без использования цикла можно с помощью оператора Erase. Термин «обнуление» можно применить только к массиву числового типа.

Обратите внимание, что оба массива при таком способе очистки будут возвращены в исходное состояние, которое они имели сразу после объявления:

  • статический Massiv1 сохранит размерность (4, 3);
  • динамический Massiv2 не сохранит размерность ().

Второй способ

Динамический массив можно очистить (обнулить) без использования цикла с помощью оператора ReDim. Просто переопределите его с той же размерностью.

VBA Excel. Массивы (одномерные, многомерные, динамические) : 12 комментариев

Это все очень интересно и здорово, но хотелось бы еще узнать о заполнении массивов.
Например один цикл поможет заполнить одномерный массив. Два цикла двумерный. Но это в случае когда значения рассчитываются.
А если у меня есть двумерный массив с данными (постоянными) и мне надо его "ввести" в программу — как быть? Самый простой пример — календарь. В строках первый элемент месяц, второй элемент 1 число, третий элемент день недели, четвертое — последний день месяца, пятый — день недели последнего числа месяца.
То есть на входе у меня 12 строк, 5 столбцов, массив 5х12.
Теперь мне надо его заполнить, 60 значений. Цикл не подойдет, надо каждое вносить отдельно.
Чисто теоретически можно представить массив как одномерный массив строк, каждый элемент которого состоит из одномерного массива столбцов. А вот как это присвоение оформить в ВБА?

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

Увы, не могу. Дело в том, что :
1. Я пишу не в Екселе, а в Автокаде — там нет ячеек.
2. Мои данные это по сути константы, мне придется их заносить в ячейки (если делать нечто подобное в Екселе), а затем считывать программно. При этом с листа (из ячеек) их надо прятать, что бы случайно никто не изменил. Поэтому данные необходимо вводить в теле программы в массив и далее с ними работать. В то же время необходимо сделать так, что бы при желании было легко добавить еще одну строку с данными.

Артем, я правильно понял, что вы вносите все данные в массив вручную и хотите сделать автоматическое добавление «пустых строк» в массив под новые данные?

Нет, вручную вношу до 50 "строк", вручную добавляю (при необходимости, а необходимость возникает не часто) по 1-15 строк.
В общем на одном форуме подсказали несколько вариантов. Один из наиболее подходящих (для меня) оказался массив массивов. То есть создается массив, каждый элемент которого это тоже массив, содержащий наименование и далее параметры.
При необходимости просто добавляю элемент массива (строку) с наименованием и параметрами и все.
А вот как правильно обратится к каждому элементу массива и как работать с массивом массивов — вот это хорошо бы у вас в статье отобразить.

Артем, посмотрите еще вариант создания массива одномерных массивов с помощью пользовательских типов данных. Там есть и как заполнить, и как обратиться к каждому элементу.

А как узнать размерность массива?

Иван, размерность массива (количество измерений) вы можете узнать с помощью пользовательской функции KolichestvoIzmereniy.

to Артем:
если массив в автокаде надо заполнять какими-то постоянными данными, то почему бы не хранить эти данные в отдельном файле (напр. txt или dbf) и считывать данные оттуда.

Msgbox не переваривает ";" когда ввожу &amp он пилит её на & amp и никак не учитывает, но стоит добавить в конец ";" чтобы получилось & всю строку выделяет красным!

Привет, Павел!
Это защита WordPress заменила амперсанд & на его html-код. Исправил.

Рубрика: Информационные технологии

Дата публикации: 10.02.2018 2018-02-10

Статья просмотрена: 1265 раз

Библиографическое описание:

Алексеев Н. Л. Использование двумерных массивов в VBA на уроках информатики // Молодой ученый. — 2018. — №6. — С. 15-20. — URL https://moluch.ru/archive/192/48265/ (дата обращения: 19.11.2019).

VBA — универсальный язык программирования. С помощью его можно создавать полноценные приложения на Visual Basic, поскольку эти языки — близкие родственники. Создавать программы на нем можно очень быстро и легко, не нужно заботиться об установке и настройке среды программирования и наличии нужных библиотек на компьютере пользователя — MS Office есть практически на любом компьютере. Рассмотрим пример создания программы с использованием двумерных массивов.

Удобство среды VBA заключается в том, что она внедрена в пакет прикладных программ Microsoft Office и, соответственно, является доступной практически на любом ПК, не требует установки дополнительного программного обеспечения.

Немногие учителя используют в своей работе возможности так называемого офисного программирования. С помощью языка VBA можно создавать различные проекты, которые пригодны к использованию, в том числе на уроках информатики.

Массив — набор однотипных переменных, объединенных одним именем и доступных через это имя и порядковый номер переменной в наборе. Организуем в электронных таблицах Excel двумерный массив А, состоящий из 20 х 10 = 200 элементов. Для этого в Excel создадим поле, в котором определим элементы массива целыми случайными числами от 1 до 100.

Рис. 1. Поле двумерного массива в Excel

Перейдём во вкладку Разработчик → Visual Basic. Затем вкладка Insert → Module. Откроется окно для создания программного кода.

Рис. 2. Окно для создания программного кода

Dim A(20, 10) As Integer

For i = 1 To 20 ‘Число строк в массиве

For j = 1 To 10 ‘Число столбцов в массиве

A(i, j) = Int(Rnd * 100 + 1) ‘Задание массива целыми числами от 1 до 100

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

Рис. 3. Заполнение двумерного массива в Excel

Определим переменные для нахождения максимального, минимального, среднего значения в таблице, кроме того, вычислим сумму и размах таблицы. Все перечисленные переменные целые, кроме действительного среднего значения. Присвоим им соответствующие типы данных: Dim Max, Min, Сумма, Размах As Integer, Среднее As Single.

Используя принцип математической индукции, найдём наибольшее и наименьшее значения таблицы: If A(i, j) >Max Then Max = A(i, j)

If A(i, j) = Max Then Max = A(i, j) ‘Вычисление Максимального элемента в массиве

If A(i, j) A(i, j) / 2 And A(i, j) 3 <> A(i, j) / 3 And A(i, j) 5 <> A(i, j) / 25 Then Cells(i, j + 22) = "*"

If A(i, j) 2 = A(i, j) / 2 Then Кратные2 = Кратные2 + 1 ‘Подсчёт количества чисел кратных 2

If A(i, j) 3 = A(i, j) / 3 Then Кратные3 = Кратные3 + 1 ‘Подсчёт количества чисел кратных 3

If A(i, j) 5 = A(i, j) / 5 Then Кратные5 = Кратные5 + 1 ‘Подсчёт количества чисел кратных 5

If Cells(i, j + 22) = "*" Then Звезд = Звезд + 1 ‘Подсчёт количества "*"

Range(«O22").Value = «Копия Таблицы»

Range(«Z22").Value = «Обработанная таблица»

Range(«W22").Value = «Кратные 2" ‘Вывод результатов

Range(«W23").Value = «Кратные 3"

Range(«W24").Value = «Кратные 5"

Рис. 5. Обработанная таблица

Используя офисное программирование можно сформировать у студентов комплекс знаний, умений и навыков, необходимых для решения профессиональных задач в области автоматизации работы с офисным пакетом Microsoft Office.

  1. И. Г. Фризен. Офисное программирование: Учебное пособие / М. Издательско-торговая корпорация «Дашков и К», 2013 г.
  2. Языки управления приложениями: Учебно-методическое пособие. — М.: Издательский отдел факультета ВМиК МГУ имени М. В. Ломоносова № 05899; 2015 г.
  3. https://studfiles.net/preview/2897110/
  4. https://www.intuit.ru/studies/courses/23/23/info

Похожие статьи

Алгоритм интервального оценивания параметров нелинейных.

m — число параметров функции-модели; n — число точек регрессии; step0, step — начальный и рабочий шаг исходного многогранника (симплекса)

F(1 to m + 4) — массив значений ЦФ или ШФ в вершинах ДМ

Методика проведения лабораторной работы по дисциплине.

поиска максимального элемента в одномерном массиве; 7) пример программы вычисления суммы элементов одномерного массива и количества отрицательных элементов в массиве; 8) особенности работы с двумерными массивами; 9).

Анализ эффективности алгоритмов сортировки и вcтроенных.

Рис. 1. Исходный код сортировки выбором. В таблице 1 приведен расчет времени, необходимый для успешного выполнения сортировки

Учитывая это, сложность алгоритма сортировки вставками определена как O(n^2), где n — количество элементов массива.

Использование алгоритмов нечеткого поиска при решении задачи.

Пусть, например, в качестве аргументов заданы две строки «Привет» и «Превед» и некоторая максимальная длина подстрок, скажем, 4, тогда получаем значения коэффициента, равные 0,75, при n=1; 0,4 при n=2

Сравнительный анализ алгоритмов сортировки данных в массивах.

Размножение объектов массивом в системе моделирования.

По умолчанию максимальное число элементов массива, построенного одной командой, равно 100000.

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

Сравнительный анализ алгоритмов сортировки данных в массивах

При сортировке подсчетом используется диапазон чисел сортируемого массива для подсчёта совпадающих элементов [2, с. 24]..

Использование алгоритмов нечеткого поиска при решении задачи устранения дубликатов в массивах данных.

Методика формирования информационных файлов для.

— составление графа -«дерево» учебных элементов по теме. — определение понятийных и эмпирических индикаторов.

Размеpы двумеpного массива могут меняться в зависимости от объема pаздела (количество стpок в одной задаче и общее количество задач или вопpосов).

Алгоритмические аспекты доминирования в графах

В дальнейшем эти числа используются для вычисления числа доминирования графа.

Данные структуры инициализируются для работы с заданным деревом в программном виде.

1) структура графа в виде массива окрестностей каждой вершины.