Как узнать размерность массива vba
Перейти к содержимому

Как узнать размерность массива vba

  • автор:

Функция UBound

Возвращает значение типа Long, содержащее верхнюю границу размерности для указанного измерения массива.

UBound ( имя_массива [, измерение ] )

Функция UBound имеет следующие аргументы:

имя_массива

Обязательный аргумент. Имя переменной массива; должно удовлетворять стандартным соглашениям об именовании.

измерение

Необязательный аргумент. Variant (Long). Целое число, указывающее, для какого измерения массива должна быть возвращена верхняя граница. Для первого измерения следует задать значение 1, для второго — 2 и т. д. Если аргумент измерение не указан, используется значение 1.

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

Функция UBound возвращает следующие значения для массива с указанными изменениями:

Dim A(1 To 100, 0 To 3, -3 To 4)

Возвращаемое значение

Пример

Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.

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

Dim Upper
‘ Declare array variables.
Dim MyArray(1 To 10, 5 To 15, 10 To 20)
Dim AnyArray(10)
Upper = UBound(MyArray, 1) ‘ Returns 10.
Upper = UBound(MyArray, 3) ‘ Returns 20.
Upper = UBound(AnyArray) ‘ Returns 10.

Array Dimensions in Visual Basic

Измерение — это направление, в котором можно изменять спецификацию элементов массива. Массив, содержащий общий объем продаж за каждый день месяца, имеет одно измерение (день месяца). Массив, содержащий общий объем продаж по отделам за каждый день месяца, имеет два измерения (номер отдела и день месяца). Число измерений массива называется его рангом.

Можно использовать свойство , Rank чтобы определить, сколько измерений имеет массив.

Работа с измерениями

Элемент массива указывается путем указания индекса или индекса для каждого из его измерений. Элементы смежны вдоль каждого измерения от индекса 0 до самого высокого индекса для этого измерения.

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

Одно измерение

Многие массивы имеют только одно измерение, например количество людей каждого возраста. Единственным требованием для указания элемента является возраст, для которого этот элемент содержит счетчик. Таким образом, такой массив использует только один индекс. В следующем примере объявляется переменная для хранения одномерного массива возрастных счетчиков для возрастов от 0 до 120.

Dim ageCounts(120) As UInteger 

Два измерения

Некоторые массивы имеют два измерения, например количество офисов на каждом этаже каждого здания в кампусе. Спецификация элемента требует как номера здания, так и пола, и каждый элемент содержит счетчик для этого сочетания здания и пола. Таким образом, такой массив использует два индекса. В следующем примере объявляется переменная для хранения двумерного массива офисных счетчиков для зданий от 0 до 40 и этажей с 0 по 5.

Dim officeCounts(40, 5) As Byte 

Двумерный массив также называется прямоугольным массивом.

Три измерения

Некоторые массивы имеют три измерения, например значения в трехмерном пространстве. Такой массив использует три индекса, которые в данном случае представляют координаты x, y и z физического пространства. В следующем примере объявляется переменная для хранения трехмерного массива температур воздуха в различных точках трехмерного объема.

Dim airTemperatures(99, 99, 24) As Single 

Более трех измерений

Хотя массив может иметь до 32 измерений, редко бывает больше трех.

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

Использование различных измерений

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

Dim salesAmounts(30) As Double 

Теперь предположим, что вы хотите отслеживать одни и те же сведения не только за каждый день месяца, но и за каждый месяц года. Можно объявить двумерный массив с 12 строками (для месяцев) и 31 столбцом (для дней), как показано в следующем примере.

Dim salesAmounts(11, 30) As Double 

Теперь предположим, что вы решили хранить данные в массиве более одного года. Если вы хотите отслеживать объемы продаж в течение 5 лет, можно объявить трехмерный массив с 5 слоями, 12 строками и 31 столбцом, как показано в следующем примере.

Dim salesAmounts(4, 11, 30) As Double 

Обратите внимание, что так как каждый индекс варьируется от 0 до максимального значения, каждое измерение salesAmounts объявляется как меньше требуемой длины для этого измерения. Обратите внимание, что размер массива увеличивается с каждым новым измерением. Три размера в предыдущих примерах : 31, 372 и 1860 элементов соответственно.

Массив можно создать без использования Dim оператора или New предложения . Например, можно вызвать CreateInstance метод или другой компонент может передать код в массив, созданный таким образом. Такой массив может иметь нижнюю границу, отличаемую от 0. Вы всегда можете проверить нижнюю границу измерения с помощью GetLowerBound метода или LBound функции .

См. также

  • Массивы
  • Устранение неполадок, связанных с массивами

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как узнать размерность массива vba

Argument ‘Topic id’ is null or empty

Сейчас на форуме

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

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

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

Developing.ru

Размерность массива. Массив: как получить количество его размерностей? VBA.

Весь MS Office, программирование на Visual Basic for Applications и MS VB
tolikt Сообщения: 93 Зарегистрирован: 29 окт 2005, 12:33 Откуда: NewVasюbirsk
10символов
Diment Сообщения: 135 Зарегистрирован: 04 сен 2006, 11:39 Откуда: Кисловодск

когда ты объевляешь массив. в твоем случае
dim aArray(10) as String

если размер массива заранее не известен то он объевляется через ReDim, а верхнюю и нижнюю границу массива можно узнать через UBound и LBound соответственно. синтаксис этих ф-й можешь выяснить через справку

shvm Сообщения: 10 Зарегистрирован: 16 апр 2007, 09:32
Функции
UBound(ArrayName[,Dimension])
и
LBound(ArrayName[,Dimension])
tolikt Сообщения: 93 Зарегистрирован: 29 окт 2005, 12:33 Откуда: NewVasюbirsk

Так и думал, что не совсем поняли меня. :-))

Dim aArray(10) ‘количество размерностей — 1
Dim bArray(10, 20) ‘количество размерностей — 2
Dim cArray(10, 20, 15) ‘количество размерностей — 3
Dim fArray(10, 3, 4 To 8, 5, 22, 5 To 10, 6) ‘количество размерностей — 7

Как получить количество размерностей для каждого массива?
Например:
MsgBox ФункцияПодсчётаЧислаРазмерностей(fArray)
должен выдать 7.

ЗЫ: Для чего это надо:
Есть некая подпрограммка для некоей обработки массивов. В неё передаются массивы разных размерностей. И в процессе обработки нужно определить, например, UBound(fArray [,Dimension]) для всех или некоторых размерностей. И тут надо знать это самое [,Dimension].

Что-то типа того:
Dim Z(3, 5, 8, 5 To 12, 4, 3 To 10, 4 To 22)
On Error Resume Next
Err.Clear
i = 1
While Err.Number = 0
B = UBound(Z, i)
i = i + 1
Wend
MsgBox i — 2
‘ выдаёт 7

Sherlock Holms Сообщения: 10 Зарегистрирован: 02 дек 2006, 20:40

Может создать еще один массив, в котором хранить размерности массивов, возможно еще какую-нибудь инфу о массиве, ну имя его, например.

Игорь Акопян Сообщения: 1419 Зарегистрирован: 13 окт 2004, 17:11 Откуда: СПБ Контактная информация:

можно как-то так
[syntax=vb]
Sub qwe()
Dim MyArray(1 To 10, 5 To 15, 10 To 20)
Dim i As Integer, UB As Integer
On Error GoTo Err
i = 0
Do
i = i + 1
UB = UBound(MyArray, i)
Loop Until False
Err:
i = i — 1 ‘ максимальная размерность
End Sub
[/syntax]

Игорь Акопян Сообщения: 1419 Зарегистрирован: 13 окт 2004, 17:11 Откуда: СПБ Контактная информация:
&quot писал(а): Что-то типа того:
дык так и сделай
tolikt Сообщения: 93 Зарегистрирован: 29 окт 2005, 12:33 Откуда: NewVasюbirsk

Sherlock Holms, dummy писал(а): Может создать еще один массив, в котором хранить размерности массивов, возможно еще какую-нибудь инфу о массиве, ну имя его, например.

В том-то и дело, что заранее о массиве ничего не известно: ни количество размерностей, ни границы его.

Игорь Акопян, Moderator&Куратор писал(а): дык так и сделай

Очень не нравится что-либо с On Error. В некоторых ситуациях (сейчас не могу точно вспомнить, в каких) даже при On Error всё равно выдаётся ошибка и приходится усложнять код для исключения возможной ошибки.
Просто думал, есть какой-то более простой и надёжный способ получить размерность массива.
Пока, естественно, пользуюсь тем, что есть. ибо пока вроде как работает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *