Объявление массива vba: Объявление массивов (VBA) | Microsoft Learn
Содержание
Объявление массивов (VBA) | Microsoft Learn
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Статья -
- Чтение занимает 2 мин
-
Массивы объявляются так же, как и другие переменные, при помощи операторов Dim, Static, Private или Public Отличие скалярных переменных (которые не являются массивами) от переменных массивов заключается в том, что для массива, как правило, необходимо указывать размер. Массив с указанным размером является массивом фиксированного размера. Массив, размер которого можно изменить во время выполнения программы, является динамическим массивом.
Индексация массива от 0 или 1 зависит от оператора Option Base. Если не указано Option Base 1, все индексы массива будут начинается с нуля.
Объявление статического массива
В приведенном ниже примере кода массив фиксированного размера объявлен массивом целых переменных (Integer) с 11 строками и 11 столбцами:
Dim MyArray(10, 10) As Integer
Первый аргумент определяет количество строк, второй — столбцов.
Как и в случае объявления любой другой переменной, если для объявленного массива не указать тип данных, его элементам будет присвоен тип данных Variant. Каждый числовой элемент Variant массива использует 16 байтов. Каждый строчный элемент Variant использует 22 байта. Чтобы написать как можно более компактный код, четко объявите для своих массивов тип данных, отличный от Variant.
В приведенном ниже примере кода сравниваются размеры нескольких массивов.
' Integer array uses 22 bytes (11 elements * 2 bytes). ReDim MyIntegerArray(10) As Integer ' Double-precision array uses 88 bytes (11 elements * 8 bytes). ReDim MyDoubleArray(10) As Double ' Variant array uses at least 176 bytes (11 elements * 16 bytes). ReDim MyVariantArray(10) ' Integer array uses 100 * 100 * 2 bytes (20,000 bytes). ReDim MyIntegerArray (99, 99) As Integer ' Double-precision array uses 100 * 100 * 8 bytes (80,000 bytes). ReDim MyDoubleArray (99, 99) As Double ' Variant array uses at least 160,000 bytes (100 * 100 * 16 bytes). ReDim MyVariantArray(99, 99)
Максимальный размер массивов зависит от операционной системы и доступного объема памяти. Использование массивов, размер которых превышает объем доступной оперативной памяти вашего компьютера, приводит к снижению скорости, поскольку системе необходимо выполнять запись данных и чтение с диска.
Объявление динамического массива
Объявив динамический массив, вы сможете менять его размер во время выполнения кода. Используйте операторы Static, Dim, Private или Public, чтобы объявить массив, не указывая значение в скобках, как показано в следующем примере:
Dim sngArray() As Single
Примечание
Используйте оператор ReDim, чтобы неявно объявить массив в процедуре. Будьте внимательны и вводите имя массива без ошибок при использовании оператора ReDim. Даже если в модуль включен оператор Option Explicit, будет создан второй массив.
В процедуре внутри области массива используйте оператор ReDim, чтобы изменить количество измерений, задать количество элементов и определить нижнюю и верхнюю границы каждого измерения. Используйте оператор ReDim, чтобы изменить динамический массив при необходимости. Однако значения внутри массива при этом не сохраняются. Используйте ReDim Preserve для расширения массива, сохраняя при этом текущие значения.
Например, приведенный ниже оператор увеличивает массив на 10 элементов, сохраняя при этом текущие значения исходных элементов.
ReDim Preserve varArray(UBound(varArray) + 10)
Примечание
При использовании ключевого слова Preserve внутри динамического массива можно менять только верхнюю границу последнего измерения; изменить количество измерений нельзя.
См. также
- Темы по основам Visual Basic
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Использование массивов (VBA) | Microsoft Learn
-
Статья -
- Чтение занимает 2 мин
-
Можно объявить массив для работы с набором значений одного типа данных. Массив представляет собой одиночную переменную с множеством ячеек для хранения значений, тогда как типовая переменная имеет только одну ячейку хранилища, в которой может храниться только одно значение. Следует обращаться к массиву как одному целому, когда необходимо сослаться на все значения, хранящиеся в нем, или можно обращаться к отдельным элементам.
Например, чтобы хранить ежедневные расходы по каждому дню года, можно объявить одну переменную массива с 365 элементами, а не объявлять 365 переменных. Каждый элемент массива содержит одно значение. В следующем заявлении объявляется переменная массива с 365 элементами. По умолчанию массив индексируется, начиная с нуля, так что верхняя граница массива равна 364, а не 365.
Dim curExpense(364) As Currency
Чтобы установить значение отдельного элемента, указывается индекс этого элемента. В следующем примере каждому элементу массива присваивается начальное значение, равное 20.
Sub FillArray() Dim curExpense(364) As Currency Dim intI As Integer For intI = 0 to 364 curExpense(intI) = 20 Next End Sub
Изменение нижней границы
Используйте заявление Option Base в верхней части модуля, чтобы изменить индекс по умолчанию первого элемента с 0 на 1. В следующем примере в заявлении Option Base изменяется индекс для первого элемента, а в заявлении Dim объявляется переменная массива с 365 элементами.
Option Base 1 Dim curExpense(365) As Currency
Можно также в явном виде установить нижнюю границу массива, используя выражение To, как показано в следующем примере.
Dim curExpense(1 To 365) As Currency Dim strWeekday(7 To 13) As String
Хранение значений Variant в массивах
Существует два способа создания массивов значений Variant . Один способ — объявление массива с типом данных Variant, как показано в следующем примере:
Dim varData(3) As Variant varData(0) = "Claudia Bendel" varData(1) = "4242 Maple Blvd" varData(2) = 38 varData(3) = Format("06-09-1952", "General Date")
Другой способ — присвоение массива, возвращаемого функцией Array, переменной Variant, как показано в следующем примере.
Dim varData As Variant varData = Array("Ron Bendel", "4242 Maple Blvd", 38, _ Format("06-09-1952", "General Date"))
Независимо от способа создания массива элементы в массиве значений Variant идентифицируют по индексу. Например, в любом из предыдущих примеров может быть добавлен следующий оператор.
MsgBox "Data for " & varData(0) & " has been recorded."
Использование многомерных массивов
В Visual Basic допускается объявлять массивы с 60 размерностями, максимум. Например, следующий оператор объявляет 2-мерный массив 5 на 10.
Dim sngMulti(1 To 5, 1 To 10) As Single
Если рассматривать массив как матрицу, первый аргумент представляет строки, а второй аргумент представляет столбцы.
Использование вложенных для… Следующие утверждения для обработки многомерных массивов. Следующая процедура позволяет заполнить двумерный массив значениями Single.
Sub FillArrayMulti() Dim intI As Integer, intJ As Integer Dim sngMulti(1 To 5, 1 To 10) As Single ' Fill array with values. For intI = 1 To 5 For intJ = 1 To 10 sngMulti(intI, intJ) = intI * intJ Debug.Print sngMulti(intI, intJ) Next intJ Next intI End Sub
См. также
- Темы по основам Visual Basic
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Объявление массивов (VBA) | Microsoft Узнайте
Редактировать
Твиттер
Фейсбук
Эл. адрес
- Статья
- 3 минуты на чтение
Массивы объявляются так же, как и другие переменные, с использованием Dim , Static , Private или Общедоступные операторы . Разница между скалярными переменными (теми, которые не являются массивами) и переменными-массивами заключается в том, что вы обычно должны указывать размер массива. Массив, размер которого указан, является массивом фиксированного размера. Массив, размер которого можно изменить во время работы программы, является динамическим массивом.
Индексируется ли массив с 0 или 1, зависит от настройки оператора Option Base . Если Option Base 1 не указан, все индексы массива начинаются с нуля.
Объявление фиксированного массива
В следующей строке кода массив фиксированного размера объявляется как массив Integer с 11 строками и 11 столбцами:
Dim MyArray(10, 10) As Integer
Первый аргумент представляет строки; второй аргумент представляет столбцы.
Как и в случае объявления любой другой переменной, если вы не укажете тип данных для массива, тип данных элементов объявленного массива будет Variant . Каждая цифра Вариант Элемент массива использует 16 байт. Каждый элемент строки Variant использует 22 байта. Чтобы написать как можно более компактный код, явно объявите, что ваши массивы имеют тип данных, отличный от Variant .
Следующие строки кода сравнивают размер нескольких массивов.
' Целочисленный массив использует 22 байта (11 элементов * 2 байта). ReDim MyIntegerArray(10) как целое число ' Массив двойной точности использует 88 байт (11 элементов * 8 байт). ReDim MyDoubleArray(10) как двойной ' Вариантный массив занимает не менее 176 байт (11 элементов * 16 байт). Изменить размер MyVariantArray(10) ' Целочисленный массив использует 100 * 100 * 2 байта (20 000 байт). ReDim MyIntegerArray (99, 99) как целое число ' Массив двойной точности использует 100 * 100 * 8 байт (80 000 байт). ReDim MyDoubleArray (99, 99) как двойной ' Массив вариантов использует не менее 160 000 байт (100 * 100 * 16 байт). ReDim MyVariantArray(99, 99)
Максимальный размер массива зависит от операционной системы и объема доступной памяти. Использование массива, превышающего объем оперативной памяти, доступной в вашей системе, выполняется медленнее, поскольку данные необходимо считывать с диска и записывать на него.
Объявить динамический массив
Объявив динамический массив, вы можете изменить размер массива во время выполнения кода. Используйте оператор Static , Dim , Private или Public для объявления массива, оставив скобки пустыми, как показано в следующем примере.
Dim sngArray() как одиночный
Примечание
Используйте оператор ReDim для неявного объявления массива внутри процедуры. Будьте осторожны, чтобы не ошибиться в имени массива при использовании Заявление ReDim . Даже если в модуль включен оператор Option Explicit , будет создан второй массив.
В процедуре в области действия массива используйте оператор ReDim , чтобы изменить количество измерений, определить количество элементов и определить верхнюю и нижнюю границы для каждого измерения. Используйте оператор ReDim , чтобы изменять динамический массив так часто, как это необходимо. Однако каждый раз, когда вы делаете это, существующие значения в массиве теряются. Используйте ReDim Preserve для расширения массива при сохранении существующих значений в массиве.
Например, следующая инструкция увеличивает массив на 10 элементов без потери текущих значений исходных элементов.
ReDim Preserve varArray(UBound(varArray) + 10)
Примечание
При использовании ключевого слова Сохранить с динамическим массивом можно изменить только верхнюю границу последнего измерения, но нельзя изменить количество измерений.
См. также
- Основные темы Visual Basic
Поддержка и отзывы
У вас есть вопросы или отзывы об Office VBA или этой документации? См. раздел Поддержка и отзывы Office VBA, чтобы узнать, как вы можете получить поддержку и оставить отзыв.
Использование массивов (VBA) | Microsoft Узнайте
Редактировать
Твиттер
Фейсбук
Эл. адрес
- Статья
- 2 минуты на чтение
Вы можете объявить массив для работы с набором значений одного типа данных. Массив — это отдельная переменная с множеством ячеек для хранения значений, в то время как типичная переменная имеет только одну ячейку для хранения, в которой она может хранить только одно значение. Обращайтесь к массиву в целом, если вы хотите обратиться ко всем содержащимся в нем значениям, или вы можете обратиться к его отдельным элементам.
Например, для хранения ежедневных расходов на каждый день года можно объявить одну переменную-массив с 365 элементами вместо объявления 365 переменных. Каждый элемент массива содержит одно значение. Следующий оператор объявляет переменную массива с 365 элементами. По умолчанию массив индексируется, начиная с нуля, поэтому верхняя граница массива равна 364, а не 365.
Dim curExpense(364) As Currency
Чтобы установить значение отдельного элемента, укажите индекс элемента. В следующем примере каждому элементу массива присваивается начальное значение 20.
Sub FillArray () Dim curExpense(364) в качестве валюты Dim intI как целое число Для intI = от 0 до 364 curExpense(intI) = 20 Следующий Конец сабвуфера
Изменение нижней границы
Используйте оператор Option Base в верхней части модуля, чтобы изменить индекс по умолчанию первого элемента с 0 на 1. В следующем примере оператор Option Base изменяет индекс для первый элемент, а оператор Dim объявляет переменную массива с 365 элементами.
Опция База 1 Dim curExpense(365) в качестве валюты
Можно также явно задать нижнюю границу массива с помощью предложения To , как показано в следующем примере.
Dim curExpense(от 1 до 365) в качестве валюты Dim strWeekday (от 7 до 13) как строка
Сохранение значений Variant в массивах
Существует два способа создания массивов значений Variant . Один из способов — объявить массив данных типа Variant, как показано в следующем примере:
Dim varData(3) как вариант varData(0) = "Клаудия Бендель" varData(1) = "Кленовый бульвар, 4242" varData(2) = 38 varData(3) = Формат("09-06-1952", "Общая дата")
Другой способ — присвоить массив, возвращаемый функцией Array , переменной Variant , как показано в следующем примере.
Dim varData как вариант varData = Array("Рон Бендель", "Кленовый бульвар, 4242", 38, _ Формат("09-06-1952", "Общая дата"))
Вы идентифицируете элементы в массиве из Вариант значений по индексу, независимо от того, какой метод вы используете для создания массива.