Как вывести массив в vba
Как вывести массив в vba
Что такое массив
Типы массивов
Массивы в VBA и во многих других языках программирования делятся на 2 класса:
Объявление массивов
Объявление фиксированных массивов
Рекомендация : при объявлении массивов VBA я советую вам давать всем именам префикс » arr «. Я сторонник венгерской нотации.
Помимо вышеуказанного вы вправе использовать следующий синтаксис, который НЕ зависит от option base <0|1>:
таким образом вы в явном виде указываете и нижнюю, и верхнюю границы. Как видите, нижняя граница совершенно не обязательно должна начинаться с 0 или 1. Более того, индексы границ могут принимать и отрицательные значения, главное чтобы нижняя была меньше верхней.
Помимо одномерных массивов, можно объявлять и массивы с размерностью больше единицы.
Объявление динамических массивов
Динамические массивы объявляться так:
Однако, использовать их после такого объявления пока ещё нельзя. Необходимо выделить память под массив. Особенность работы с динамическим массивом как раз состоит в том, что программист отвечает за его своевременное расширение (усечение) в памяти. Для этого существует специальный оператор, который имеет следующий синтаксис:
ReDim [Preserve] varname(subscripts) [As Type]
После этого оператора, вы можете использовать элементы массива arrOpen с 0-го по 5-й. Всё, что мы говорили про оператор option base и нижнюю границу, верно и для динамических массивов. Предположим, что вы сохранили информацию в элементах 0-5 и у вас поспела новая порция информации для элементов 6-11. Чтобы разместить в данном массиве новые элементы и не потерять старые, вы должны сделать следующее:
Изменение элементов массива
Как и с обычными переменными запись информации в элемент массива происходит через оператор присваивания (=), но указанием индекса элемента массива.
Чтение элементов массива
Определение границ массива
LBound( array [, dimension])
UBound( array [, dimension])
Если вы ошибётесь с указанием правильного индекса массива, то возникнет ошибка периода исполнения с кодом 9. Эта же ошибка возникнет, если вы в функции LBound / UBound укажете несуществующую размерность массива (например, 3 для двумерного массива).
Перебор элементов массива
Собственно массивы нужны для того, чтобы хранить в них однотипную информацию и перебирать их в цикле. Как правило, алгоритм делает что-то полезное с одним элементом массива, а цикл повторяет эти типовые действия для всех элементов массива.
так же есть способ не заботиться об определении нижней и верхней границ, если алгоритм не требует от нас знания текущего индекса массива:
Передача массивов в подпрограммы
Массив с элементами типа массив
Продемонстрируем, как можно хранить в качестве элементов массива другие массивы.
Результат отладочной печати:
Функция Array
Array( arglist )
Функция Split
Split возвращает одномерный массив, содержащий подстроки, из строкового выражении с учётом указанного разделителя
Split(expression[, delimiter[, limit[, compare]]])
Результат выглядит так:
Нюансы работы с динамическими массивами
Неинициализированный массив
У динамического массива есть такое промежуточное состояние, когда он уже объявлен, но ещё не содержит никаких элементов.
То есть у переменной динамического массива есть такое состояние, когда мы не можем воспользоваться вспомогательными функциями LBound / UBound для определения его (массива) статуса. Это особенно надо учитывать, когда вы пишите подпрограммы, работающие с массивами. Прежде чем работать (перебирать) массив необходимо убедиться, что он проинициализирован, в противном случае программа вылетит с ошибкой 9.
Для этого я предлагаю пользоваться функцией подобной нижеописанной IsNotEmptyArray :
Расширение массива
Как правило, расширять динамический массив приходится в цикле. Возможны 2 стратегии: расширение на 1 элемент, как только в этом есть необходимость (назовём это эластичным расширением), и расширение авансом, когда вы увеличиваете верхнюю границу скачками, скажем сразу на 100 элементов. Реализовав оба варианта, я для себя сделал вывод, что авансовое расширение получилось и компактнее, и работает быстрее, так как операция расширения, вообще говоря, затратна и, чем реже вызывается, тем лучше.
Авансовый метод вышел даже компактнее
Удаление массива
Получение массива на основе диапазона Excel
Дополнительные источники
В качестве источника дополнительной информации по массивам я могу порекомендовать замечательный, исчерпывающий ресурс Чарльза Пирсона (Charles H. Pearson). Его сайт следует штудировать всем, кто серьёзно осваивает VBA. Конкретно по массивам там огромное количество готовых подпрограмм для работы с ними, исходные коды, снабженные подробнейшими комментариями, продвинутые объяснения для копающих в глубину. Без преувеличения великолепный ресурс!
Использование массивов
Можно объявить массив для работы с набором значений одного типа данных. Массив представляет собой одиночную переменную с множеством ячеек для хранения значений, тогда как типовая переменная имеет только одну ячейку хранилища, в которой может храниться только одно значение. Следует обращаться к массиву как одному целому, когда необходимо сослаться на все значения, хранящиеся в нем, или можно обращаться к отдельным элементам.
Например, чтобы хранить ежедневные расходы по каждому дню года, можно объявить одну переменную массива с 365 элементами, а не объявлять 365 переменных. Каждый элемент массива содержит одно значение. В следующем заявлении объявляется переменная массива с 365 элементами. По умолчанию массив индексируется, начиная с нуля, так что верхняя граница массива равна 364, а не 365.
Чтобы установить значение отдельного элемента, указывается индекс этого элемента. В следующем примере каждому элементу массива присваивается начальное значение, равное 20.
Изменение нижней границы
Вы можете использовать заявление Option Base в верхней части модуля, чтобы изменить индекс по умолчанию первого элемента с 0 на 1. В следующем примере в заявлении Option Base изменяется индекс для первого элемента, а в заявлении Dim объявляется переменная массива с 365 элементами.
Можно также в явном виде установить нижнюю границу массива, используя выражение To, как показано в следующем примере.
Хранение значений Variant в массивах
Существует два способа создания массивов значений Variant. Один способ — объявление массива с типом данных Variant, как показано в следующем примере:
Другой способ — присвоение массива, возвращаемого функцией Array, переменной Variant, как показано в следующем примере.
Независимо от способа создания массива элементы в массиве значений Variant идентифицируют по индексу. Например, в любом из предыдущих примеров может быть добавлен следующий оператор.
Использование многомерных массивов
В Visual Basic допускается объявлять массивы с 60 размерностями, максимум. Например, следующий оператор объявляет 2-мерный массив 5 на 10.
Если рассматривать массив как матрицу, первый аргумент представляет строки, а второй аргумент представляет столбцы.
Использование вложенных для. Следующие утверждения для обработки многомерных массивов. Следующая процедура позволяет заполнить двумерный массив значениями Single.
См. также
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Массивы в VBA
Массивы используются в большинстве языков программирования и VBA, как язык высокого уровня, тоже не мог обойтись без них. Данный материал расскажет о создании массивов, их применении, а так же вы здесь найдете примеры использования массивов. Для начала разберем синтаксис определения массивов.
Объявление массивов
Пример 1. Создание (объявление) одномерного массива выполняется, так:
В данном примере объявляются: одномерный массив Arr1, содержащий ячейки с 0-й до 10-й типа Integer, массив Arr2, содержащий ячейки с 5-й до 10-й типа String и динамический массив Arr3.
Пример 2. Инициализация динамического массива и изменение его размеров
Примечание: изменение размеров функцией ReDim возможно только для динамических массивов. Если размер массива был изначально задан, то его размер уже не будет меняться функцией.
Пример 3. Объявление многомерного массива
Пример 4. Создание массива массивов
В следующем примере массив Arr2 будет содержать элементы другого массива Arr1
Определение нижней и верхней границы массива
Чтобы узнать какой самый наименьший индекс у массива и какой самый максимальный индекс массива, нужно использовать функции LBound для определения нижней границы и UBound для определения верхней границы.
Пример 5. Определение границ массива
Чтобы определить границы многомерных массивов, нужно просто использовать второй параметр функций UBound и LBound.
Задание нижней границы по-умолчанию
Пример 6. Указание нижней границы по-умолчанию.
В данном примере я намеренно использовал процедуру, чтобы показать, что Option Base нужно применять не внутри процедур и функций, а в разделе «Declarations». В результате выполнения процедуры Test будет отображено сообщение с индексом нижней границы массива, т.е. «1».
Примечание: Оператор Option Base так же влияет на функцию Array и не влияет на функцию Split (будут рассмотрены ниже), что означает, что при задании «Option Base 1», функция Array вернет массив с индексацией с 1-цы, а функция Split вернет массив с индексацией с 0.
Запись данных в массивы
Для сохранения каких-либо значений в массив, можно воспользоваться несколькими способами. С помощью примеров, покажу эти способы.
Пример 7. Запись данных в массив в цикле.
Пример 8. Запись заранее известных данных с помощью Array
Функция Array возвращает массив из перечисленных данных типа Variant. При этом, массив, который будет содержать значения, должен быть динамическим, т.е. без указания его размеров и границ.
Пример 9. Получение массива из строки с разделителями
Обход элементов массива
Пример 10. Обход элементов массива циклом For.
Пример 11. Обход элементов массива циклом For Each.
Иногда, бывает необходимость работы с массивом внутри других типов циклов, но получение значение элемента, всё-равно в них будет таким же, как и в цикле For, т.е. через индекс элемента.
Массивы в VB
Массивы в Vb
На этом уроке мы узнаем, как объявлять и заполнять массивы в visual basic net
Массивы используются в математических расчетах, компьютерной графике.
Массив – это набор элементов с общим именем. К элементу массива можно обратиться по его индексу (значение первого элемента имеет индекс 0, второго 1 и т.д.). Задается массив в Vb следующим образом
Dim имя массива () As тип элемента
Чтобы присвоить значение элементу массива в vb,необходимо указать имя массива и в скобках индекс номер элемента массива
имя массива (номер элемента) = значение.
Например, a (1) = 100 присвоит элементу массива a с номером 1 значение 100
Существуют различные способы заполнения массивов в vb.net
Заполнение массива случайными числами
Заполнение массива при объявлении
Заполнение массива с клавиатуры с помощью диалогового окна
Заполнение массива из файла
Заполнение массива в Vb случайными числами
Мы задаем массив произвольным образом (случайные целые числа) и выведем массив на экран в элемент Listbox
Размещаем в форме элементы Listbox и Button. Чтобы задать случайные числа в Vb, необходимо в начале программы создать объект, отвечающий за случайные числа.
Dim random As New Random()
Чтобы получить случайное значение в диапазоне от min до max, используется функция
random.Next(min, max)
Чтобы присвоить всем элементам массива значения и вывести их в элемент ListBox, используется цикл For. В этом цикле граница цикла совпадает с размерностью массива (числом элементов в массиве). Переменная цикла используется при обращении к элементам массива.
For i = 1 To 10 Step 1
a(i) = random.Next(1, 1000)
ListBox1.Items.Add(i & vbTab & a(i))
Next i
Полная версия программы в Vb для заполнение массива случайнйми числами:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a(100) As Integer ‘задаем целочисленный массив
Dim i As Integer ‘переменная для цикла
Dim random As New Random() ‘задаем объект случайных чисел
‘пробегаемся по всему массиву
For i = 1 To 10 Step 1
a(i) = random.Next(1, 1000) ‘присваиваем элементу массива с номером i случайное число в диапазоне от 1 до 1000
ListBox1.Items.Add(i & vbTab & a(i)) ‘выводим в Listbox номер массива и значение массива
Next i
End Sub
End Class
Заполнение массива в vb при объявлении
Массив в Vb можно ввести прямо при его объявлении. Для этого необходимо при объявлении массива не указывать его размер, а просто оставить пустые скобки, и далее после равно в фигурных скобках ввести значения элементов массива через запятую.
Public Class Form1
Dim matr() As Integer = <2, 2, 4, 4>
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j As Integer
For i = 0 To 3
ListBox1.Items.Add(matr(i))
Next
End Sub
End Class
Перменная=InputBox(“Сообщение”, “название окна”)
matr (i)=InputBox(«Введите пожалуйста (» + Str(i + 1) + ”) элемент массива»,»Заполнение массива»)
Функция Str(числовое значение) в vb преобразует числовое значение в текстовое выражение для последующего вывода в диалоговом меню
Пример программы на visual basic для ввода массива с клавиатуры
Public Class Form1
Dim matr(3) As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, j As Integer
For i = 0 To 3
matr(i) = InputBox(«Введите (» + Str(i + 1) + «) элемент массива», «Заполнение массива»)
ListBox1.Items.Add(matr(i))
Next
End Sub
End Class
Заполнение массива vb из файла
Для работы с файлами в Vb необходимо в начале программы указать
Imports System
Imports System.IO
Весь файл можно записать в строковый массив, используя команду
Dim имя массива() As String = IO.File.ReadAllLines(«путь к файлу», System.Text.Encoding.Default)
Например команда
Dim Massiv() As String = IO.File.ReadAllLines(«C: ext.txt», System.Text.Encoding.Default)
Запишет все строки файла C:ext.txt в массив строк Massiv()
Чтобы перевести строковое значение в числовое значение используется функция Val(строка)
Напишем программу на vb, которая считывает из файла массив чисел и записывает его в массив, выводит полученный массив в элемент ListBox. Чтобы вывести весь массив в ListBox нужно в цикле For использовать размер массива, который можно узнать с помощью команды
имя массива.Length
Полная программа Vb для считывания массива из файла
Imports System
Imports System.IO
Public Class Form1
Вернуться к содержанию
Массивы в VBA: как работать с массивами
Мы очень хорошо знаем, что переменная является контейнером для хранения значения. Иногда разработчики могут удерживать более одного значения в одной переменной за раз. Когда ряд значений хранится в одной переменной, он известен как переменная массива.
Объявление массивов
Массивы объявляются так же, как объявлена переменная, за исключением того, что объявление переменной массива использует скобки. В следующем примере размер массива указан в скобках.
Назначение значений массиву
Значения присваиваются массиву, указывая значение индекса массива для каждого из назначаемых значений. Это может быть строка.
Добавьте кнопку и добавьте следующую функцию.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Value stored in Array index 0 : 1
Value stored in Array index 1 : VBScript
Value stored in Array index 2 : 100
Value stored in Array index 3 : 2.45
Value stored in Array index 4 : 7/10/2013
Value stored in Array index 5 : 12:45:00 PM
Многомерные массивы
Массивы не ограничиваются одним измерением, однако они могут иметь максимум 60 измерений. Двумерными массивами являются наиболее часто используемые.
В следующем примере многомерный массив объявляется с тремя строками и четырьмя столбцами.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Объявление ReDim
Оператор ReDim используется для объявления переменных динамического массива и распределения или перераспределения пространства для хранения.
В следующем примере массив был переопределен, а затем значения сохранялись при изменении существующего размера массива.
Примечание. При изменении размера массива, меньшего, чем это было первоначально, данные в устраненных элементах будут потеряны.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
Методы массива
В VBScript есть встроенные функции, которые помогают разработчикам эффективно обрабатывать массивы. Все методы, которые используются вместе с массивами, перечислены ниже. Чтобы узнать об этом, нажмите на имя метода.
Функции для работы с массивами
LBound
Добавьте кнопку и добавьте следующую функцию.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
The smallest Subscript value of the given array is : 0
The smallest Subscript of the first dimension of arr2 is : 0
The smallest Subscript of the Second dimension of arr2 is : 0
Функция, которая возвращает целое число, соответствующее наименьшему индексу данных массивов.
UBound
Функция UBound возвращает наибольший индекс указанного массива.Следовательно, это значение соответствует размеру массива.
Добавьте кнопку и добавьте следующую функцию.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
The Largest Subscript value of the given array is : 5
The Largest Subscript of the first dimension of arr2 is : 3
The Largest Subscript of the Second dimension of arr2 is : 2
Функция, которая возвращает целое число, соответствующее самому большому индексу данных массивов.
Split
Функция Split возвращает массив, который содержит определенное количество значений, разделенных на основе разделителя.
Добавьте кнопку и добавьте следующую функцию.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
The value of array in 0 is :Red
The value of array in 1 is : Blue
The value of array in 2 is : Yellow
Функция, которая возвращает массив, содержащий указанное количество значений. Разделить на разделитель.
Это функция, которая возвращает строку, содержащую указанное количество подстрок в массиве. Это полная противоположная функция метода разделения.
Добавьте кнопку и добавьте следующую функцию.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
The value of b is :Red Blue Yellow
The Join result after using delimiter is : Red$Blue$Yellow
Функция, которая возвращает строку, содержащую указанное количество подстрок в массиве. Это полная противоположная функция метода разделения.
Filter
Функция фильтра, которая возвращает массив на основе нуля, который содержит подмножество массива строк на основе определенных критериев фильтра.
Добавьте кнопку и добавьте следующую функцию.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.p The Filter result 1: Blue
The Filter result 2: Red
The Filter result 2: Blue
The Filter result 2: Yellow
The Filter result 3: Yellow
Функция, которая возвращает массив с нулевым основанием, который содержит подмножество массива строк на основе определенных критериев фильтра.
IsArray
Функция IsArray возвращает логическое значение, указывающее, является ли указанная входная переменная переменной или переменной NOT переменной массива.
Синтаксис IsArray(variablename)
пример
Добавьте кнопку и добавьте следующую функцию.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
The IsArray result 1 : True
The IsArray result 2 : False
Функция, возвращающая логическое значение, указывающее, является ли входная переменная массивом.
Erase
Функция Erase используется для сброса значений массивов фиксированного размера и освобождения памяти динамических массивов.Он ведет себя в зависимости от типа массивов.
Добавьте кнопку и добавьте следующую функцию.
Когда вы выполняете вышеуказанную функцию, она производит следующий вывод.
The value at Zeroth index of NumArray is
The value at First index of NumArray is
The value at Second index of NumArray is
The value at Third index of NumArray is
Функция, которая восстанавливает выделенную память для переменных массива.





