Vba вложенные массивы: VBA Excel. Массивы (одномерные, многомерные, динамические)
Содержание
Массивы. Описание массивов — презентация онлайн
1. Массивы
LOGO
Массивы
Лекция
1
Понятие массив
2
Одномерные массивы
3
Двумерные массивы
4
Динамические массивы
Массив — это совокупность
элементов, которые имеют общие имя
и базовый тип.
Все элементы данных, сохраняемых в
массиве, должны иметь один и тот
же тип.
Информация, сохраненная в массиве,
может быть доступна в любом
порядке.
Одномерные
Двумерные
Многомерные
Массивы
Массивы
Статические
не меняющие
число своих
элементов
Динамические
в процессе
работы
количество
элементов
может
изменяться
6. Статические массивы
Общее количество элементов
статического массива строго
определено.
Размер массива (количество его
элементов) определяется в момент его
объявления, он остается неизменным в
течение всего процесса выполнения
программы.
7. Объявление одномерных массивов
Объявление массива с использованием
оператора Dim
Dim
<имяМассива>(<размер1,размер2,…>)
[As типДанных]
имяМассива — любое имя массива
размер1,размер2,…- границы индексов массива
типДанных – тип элементов массивы.
Размер массива определяется
параметром Размер1, размер2.
В действительности размер массива
будет на единицу большим числа
размер1, поскольку нумерация
элементов массивов VBA начинается с
индекса 0.
Пример
Dim МойМассив(50) As Integer
состоит из 51 элемента, все они будут
пронумерованы индексами от 0 до 50.
Доступ к элементам массива, происходит через
указание имени массива и заключенное в
скобки значение индекса:
Индекс массива
Имя
массива
МойМасив(0) = 1
МойМассив(25) = 73
Значение элемента
массива
Чтобы отсчет индексов массива
начинался не с нуля,
можно:
1
1 способ
Option Base 1
в начале модуля за пределами всех процедур.
В результате для всех массивов
данного модуля отсчет
Text
индексов будет
начинаться с единицы, а не с нуля.
2
Объявлении массива с использованием ключевого
слова To:
Dim ИмяМассива(НижняяГраница To
ВерхняяГраница) As Тип
Dim МойМассив(20 To 40) As Long
11.
Примеры объявления одномерных массивов
Dim
Dim
Dim
Dim
A(12) As Byte
размер начинается с
A(1 To 12) As Byte
размер начинается с
Bin(5) As Integer
размер начинается с
Str_mass(4) As String размер начинается
Dim K(7)
Dim L(0 To 3)
0
1
0
с 0
тип данных для массива можно не
объявлять, будет использован тип
Variant по умолчанию
размер начинается с 0
12. Ввод-вывод элементов массива
Для
организации обмена данными
элементами массива удобно
использовать ячейки
активного листа Exсel.
с
Свойство Cells позволяет получить
доступ к отдельной ячейке
активного листа.
13. Заполнение массива
Пусть нам необходимо заполнить массив X из десяти
элементов числами от 11 до 20. Это можно сделать
следующим образом:
Dim X(1 To 10) As Integer
For I = 1 To 10
X(I) = I + 10
Next I
‘ Перебираем все индексы
‘ Присваиваем значения от 11 до 20
14.
Вывод элементов массива
Следующий шаг: нам нужно «увидеть» полученные в оперативной
памяти значения. Для этого элементы массива X выведем на
активный лист, например, во вторую строку. Это выполняет
следующий фрагмент программы:
…
For I = 1 To 10
‘ Перебираем все индексы
Cells(2, I) = X(I) ‘ Присваиваем ячейкам листа
Next I
значения элементов X
Пример: Сформировать массив, заполненный случайными
числами из диапазона [A, B]. Полученные
массива
элементы
вывести в первую строку активного листа.
Dim X() As Integer
‘ Описание массива
Dim N As Integer
Dim I, A, B As Integer
N = Val(TextBox_N.Value) ‘ количество элементов массива
ReDim X(1 To N) As Integer ‘ Определяем размерность массива
A = -20
‘ Нижняя граница диапазона
B = 30
‘ Верхняя граница диапазона
Randomize
‘ Инициализация датчика случайных чисел
‘ Присваиваем элементам массива случайные значения
For I = 1 To N
X(I) = Int((B — A) * Rnd + A)
Next I
‘ Выводим элементы массива в первую строку активного листа
For I = 1 To N
Cells(1, I) = X(I)
Next I
16.
Объявление двумерных массивов
Объявление массива с использованием
оператора Dim
Dim
<имяМассива>(<размер1,размер2,…>)
[As типДанных]
имяМассива — любое имя массива
размер1,размер2 — размер массива.
17. Примеры объявления двумерных массивов
Dim MyArrayA(10, 1) As Single
Массив MyArrayА содержит 11 строк
и 2 столбца типа Single. Границы
нумерации заданы неявно.
Dim MyArrayB(1 To 25, 1 To 5)
Массив MyArrayB содержит 25 строк
и 5 столбцов. Границы нумерации
заданы явно. Тип не указан — в
массиве можно хранить любые
данные.
Для обработки многомерных массивов используются
вложенные инструкции For … Next. В следующей
процедуре двумерный массив заполняется
значениями типа данных Single и выводится на
активный лист.
Sub FillArrayMulti()
Dim I As Integer, J As Integer
Dim A(1 To 5, 1 To 10) As Single
‘ Заполнение массива
For I = 1 To 5
For J = 1 To 10
A(I, J) = I * 10 + J
Next J
Next I
‘ Вывод на активный лист
For I = 1 To 5
For J = 1 To 10
Cells(I, J) = A(I, J)
Next J
Next I
End Sub
19.
Динамические массивы
Размер динамических массивов не
является фиксированным. В ходе
выполнения программы он может
увеличиваться и уменьшаться по мере
необходимости.
Динамический массив объявляется с
помощью пустых скобок:
Dim ДинамическийМассив() As Тип
Прежде чем приступить к использованию
массива, необходимо определить
его размер с помощью выражения ReDim:
ReDim ДинамическийМассив(размер)
Аргумент размер определяет как
размерность массива, так и
количество элементов в каждой
размерности.
Например:
Dim Динамический1() As String
Dim Динамический2() As Integer
Dim Динамический3() As Object
…
ReDim Динамический1(100) ‘ 1 размерность, 101 элемент
ReDim Динамический2(-5 To 5) ‘ 1 размерность, 11
элементов с -5 по 5
22. Пример динамического одномерного массива
Dim X() As Integer
‘ Описание массива
Dim N As Integer, I As Integer, S As Integer
N = Val(TextBox_N.Value) ‘ Количество элементов
массива
ReDim X(1 To N) As Integer ‘ Определяем размерность
массива
…
23.
Пример двумерного динамического массива
Option Explicit
Option Base 1
Sub Массив-двумерный()
Dim mass() As Integer, n As Integer, m As
Integer
n = InputBox(«Введите количество
массива», «Размер
m = InputBox(«Введите количество
массива», «Размер
строк
массива»)
столбцов
массива»)
‘Переопределение размерности массива
ReDim mass(1 To n, 1 To m) As Integer
24. ВСТРОЕННЫЕ ФУНКЦИИ ОБРАБОТКИ МАССИВОВ
Array
Создается статический массив с элементами типа
Variant
Синтаксис:
Array(список), где
список представляет собой разделенный запятыми список значений,
присваиваемых элементам массива.
Например:
Dim A As Variant
A = Array(-12, 34, 89, 90, -45, 7.9) – создан массив
вещественных чисел;
Dim ДниНедели As Variant
ДниНедели = Array(» понедельник «, » вторник «, » среда «,
» четверг «, » пятница «, » суббота «, » воскресенье «)
– получен одномерный массив, составленный из названий
дней недели.
IsArray
Проверяет значение переменных типа Variant на предмет
содержания элементов массива. Функция возвращает
значение True, если переменная действительно содержит
ряд значений и значение False, если массивом значений не
является.
Синтаксис:
IsArray(переменная), где
переменная представляет имя переменной типа Variant
Например:
Dim X As Variant
If IsArray(X) Then MsgBox “X — является массивом.”
Lbound
Ubound
Возвращают минимальное и максимальное допустимые значения указанной
размерности. Используются для контроля за размерами как статического, так
и динамического массивов VBA. Они освобождают пользователя от
необходимости отслеживать нижнюю и верхнюю границы индекса массива.
Синтаксис:
Lbound( имяМассива [ , размерность])
Ubound( имяМассива [ , размерность]),
где
ИмяМассива – имя переменной массива нижнюю (Lbound) или верхнюю (Ubound) границу которого нужно определить;
размерность – целое число, указывающее размерность, нижнюю или верхнюю границу которой возвращает функция.
Для первой размерности следует указывать 1, для второй 2 и т. д. Если аргумент размерность опущен,
подразумевается 1.
Например:
Dim матрица As Range
Dim x( )
Set матрица = Sheets(» Лист 1 «).Range(» a2 «).CurrentRegion
x = матрица
MsgBox » строк = » & UBound(x, 1)
MsgBox » столбцов = » & UBound(x, 2)
27. Свойство CurrentRegion
Свойство CurrentRegion очень полезное свойство объекта Range. Предположим,
что требуется часто импортировать данные на рабочий лист. В некоторых
случаях результат включает пять строк, а в других — более 500 строк. Для
выбора диапазона данных используется свойство CurrentRegion. Оно указывает
на объект Range, включающий диапазон ячеек, границами которого являются
пустые строки и пустые столбцы.
Допустим, что неизвестно сколько строк содержится в результирующем множестве, но имеется адрес первой
ячейки, в которую помещены обработанные данные. Чтобы выбрать все ячейки результирующего
множества, воспользуйтесь следующей процедурой:
Public Sub SelectAll ()
‘ Активизация первой ячейки результирующего множества
Range(«А2»). Activate
‘ Выделение всего результирующего множества.
‘ Обратите внимание на то, что метод Select использован
‘ для того, чтобы выделить диапазон, включающий
‘ несколько ячеек.
ActiveCell.CurrentRegion.Select
‘Для вывода количества строк в результирующем
‘ множестве, используется свойство Count.
MsgBox «Число строк равно » & Selection.Rows.Count
End Sub
LOGO
Циклы For… Next и массивы. VBA для чайников
Циклы For… Next и массивы. VBA для чайников
ВикиЧтение
VBA для чайников
Каммингс Стив
Содержание
Циклы For… Next и массивы
Циклы For. . .Next особенно полезны при работе с массивами, именованными хранилищами для множеств элементов данных. Подробно массивы обсуждаются в главе 13, но дискуссия о циклах For. . . Next осталась бы неполной без нескольких слов о пользе таких циклов в совокупности с этими имеющими большое практическое значение корзинами для данных.
С помощью цикла For. . .Next несложно заполнить массив множеством вычисленных значений, как в следующем примере:
Dim intМассивКвадратов (14) As Integer
For a = 0 To 14
intMacсивКвадратов( a) = a * a
Next a
Этот пример программного кода начинается с объявления массива из 15 целых значений (15, а не 14, поскольку обычно VBA приписывает первому элементу в массиве индекс 0). Затем используется цикл For . . . Next, в котором каждому элементу массива, от 0 до 14, присваивается значение. Обратите внимание на то, что переменная а используется не только как счетчик, но и как индекс массива, указывающий на номер элемента в массиве.
11.4. Условия и циклы
11.4. Условия и циклы
Редко какая-либо программа или сценарий имеют линейный алгоритм. Обычно в ходе работы часто проверяются различные условия и в зависимости от результата принимаются какие-то решения. Для автоматизации работы в коде также используются циклы, которые
Циклы
Циклы
Циклы — это особые выражения, позволяющие выполнить один и тот же блок кода несколько раз. Выполнение кода прерывается по наступлению некоего условия. JavaScript предлагает программистам несколько разновидностей циклов. Рассмотрим их
Циклы
Циклы
Циклы — это особые выражения, позволяющие выполнить один и тот же блок кода несколько раз. Выполнение кода прерывается по наступлению некоего условия. JavaScript предлагает программистам несколько разновидностей циклов. Рассмотрим их подробнее.
Цикл со счетчиком
Цикл
Циклы. ru
Циклы. ru
Жизненный цикл домена в зоне. ru довольно заметно отличается от циклов в зоне. com, хотя в общих чертах ситуации, конечно, схожи. В домене RU фактически невозможно тестирование доменов без оплаты, так как отсутствует период предварительной регистрации – за внесение
7.3.5. Жизненные циклы и CMM
7.3.5. Жизненные циклы и CMM
Ключевые практики не ограничивают выбор жизненного цикла ПО. Те пользователи, которые активно использовали какой-либо определенный жизненный цикл ПО, могут быть более склонны к восприятию элементов именно этого цикла в организации и структуре
6. ЦИКЛЫ
6. ЦИКЛЫ
Циклами называются конструкции, в которых один и тот же блок программного кода многократно выполняется до тех пор, пока не будет выполнено условие окончания цикла. Любой цикл можно разделить на 4 части: инициализацию, тело, итерацию и условие завершения.
Циклы Do
Циклы Do
Все возможные версии оператора Do . .. Loop предназначены для повторения заданного блока программного кода неопределенно долго, пока не будет выполнено некоторое условие.Для того чтобы выяснить, продолжать цикл или нет, оператор Do … Loop оценивает заданное условное
10.1. Циклы
10.1. Циклы
Цикл — это блок команд, который исполняется многократно до тех пор, пока не будет выполнено условие выхода из цикла.циклы forfor (in)Это одна из основных разновидностей циклов. И она значительно отличается от аналога в языке C.for arg in [list] do команда(ы)… done
На каждом
10.2. Вложенные циклы
10.2. Вложенные циклы
Цикл называется вложенным, если он размещается внутри другого цикла. На первом проходе, внешний цикл вызывает внутренний, который исполняется до своего завершения, после чего управление передается в тело внешнего цикла. На втором проходе внешний цикл
22.
7. Циклы
22.7. Циклы
Как и в любом языке программирования, в bash можно использовать циклы. Мы рассмотрим циклы for и while, хотя вообще в bash доступны также циклы until и select, но они применяются довольно редко.Синтаксис цикла for выглядит так:
for переменная in список do
команды
done
В цикле при каждой
Циклы
Циклы
Цикл в общем смысле слова это повторение одних и тех же действий несколько раз. Если говорить об XSLT, то цикл это многократное выполнение одного и того же шаблона. Для подавляющего большинства случаев в преобразованиях достаточно бывает использовать такие элементы,
Урок 11. Циклы
Урок 11. Циклы
Условные выражения являются необходимым элементом программирования; не менее важный элемент – циклы.Компьютеры превосходно выполняют повторяющиеся задания. Во Flash этими заданиями являются циклы. Наиболее распространенная их разновидность – цикл for. Он
23.1.5. Циклы for
23.1.5. Циклы for
При работе с циклом for пользователи иногда забывают в части списка указать знак доллара. В результате список воспринимается как
Циклы
Циклы
Синтаксис циклов описан при обсуждении Проектирования по Контракту (лекция 11):frominitialization_instructionsinvariantinvariantvariantvariantuntilexit_conditionlooploop_instructionsendПредложения invariant и variant факультативны. Предложение from требуется, хотя и может быть пустым. Оно задает инициализацию параметров
Циклы
Циклы
Циклы — это особые выражения, позволяющие выполнить один и тот же блок кода несколько раз. Выполнение кода прерывается по наступлению некоего условия. ActionScript предлагает программистам несколько разновидностей циклов. Рассмотрим их.Цикл со счетчикомЦикл со
Как создать вложенный массив в VBA
Шенри
Обычная доска
#1
Привет всем,
Я хочу перебрать диапазон рабочих листов и создать вложенный массив, который выглядит примерно так:
test_array = [ [ [«Боб», «555-5555»], [«Сэм», » 555-1234″] ], [«Джо», «555-9876»] ]
… Я подозреваю, что синтаксис моего массива неверен… это просто для того, чтобы дать представление о том, как я хочу вложить.
Если я хочу вложить два массива в позицию 0 супермассива , я бы…
test_array[0][0] = [«Боб», «555-5555»]
test_array[0][1] = [«Сэм», «555-1234»]
Любой приветствуется помощь по вложению, а также соответствующий синтаксис массива VBA
SH
Создать диаграмму одним нажатием клавиши
Нажмите здесь, чтобы открыть ответ
Выберите данные и нажмите Alt+F1, чтобы вставить диаграмму по умолчанию. Вы можете изменить диаграмму по умолчанию на любой тип диаграммы
Сортировать по дате
Сортировать по голосам
ксену
MrExcel MVP
#2
Насколько мне известно, VBA не позволяет напрямую создавать или объявлять вложенные массивы (в отличие от VB и других языков). Он позволяет вам назначать массивы различным типам данных с помощью функции массива, а затем вы можете получить доступ к вложенным массивам.
Код:
Подтест() Dim test_array как вариант Дим а Дим б Дим с Dim i как целое число Dim j как целое число a = Массив ("Боб", "555-5555") b = Массив ("Сэм", "555-1234") c = Массив ("Джо", "555-9876") test_array = Массив(Массив("Боб", "555-5555"), Массив("Сэм", "555-1234"), Массив("Джо", "555-9876")) test_array = Массив (а, б, в) Для i = 0 до UBound (test_array) Для j = от 0 до 1 Отладка. Печать test_array (i) (j) test_array(i)(j) = "xxx" Следующий j Далее я Конечный переходник
более или менее то, что я только что опубликовал:
http://www.dailydoseofexcel.com/archives/2004/11/29/arrays-in-arrays/
HTH — вероятно, вы не в восторге от VBA прямо сейчас.
——————-
На самом деле, если вам нужны только парные элементы массива, вы сделаете хуже, чем используйте объект словаря, который доступен из среды выполнения сценариев Microsoft. библиотека:
http://msdn.microsoft.com/en-us/library/x4k5wbx4(VS.85).aspx
если вы используете словарь, одна из проблем заключается в том, что если вы попытаетесь получить элемент с не -существующий ключ, он добавляет ключ в словарь вместе с пустым элементом. Используйте метод .Exists перед установкой или возвратом элемента.
Возможно, еще одним вариантом является пользовательский объект класса с определяемыми пользователем свойствами?
С уважением
Голосовать за
0
Шенри
Обычная доска
#3
Александр,
Спасибо за ответ… Завтра поиграюсь с вашим методом вложенности массивов, а также с объектом словаря.
Я сделал перерыв в работе с VBA, чтобы изучить Ruby, и теперь возвращение к VBA в некотором роде синтаксически болезненно… Да, немного не в восторге было бы правильно.
Еще раз спасибо
SH
Голосовать за
0
ксену
MrExcel MVP
#4
Я хотел бы перебрать диапазон рабочих листов и создать вложенный массив, который выглядит примерно так
Нажмите, чтобы развернуть…
Примечание. Если вам когда-либо понадобится быстро преобразовать значения электронной таблицы в двумерный массив , варианты очень быстрые и простые:
Код:
Подтест2() Dim ws As рабочий лист Затемнить как вариант Установите ws = Workbooks. Add.Worksheets(1) С ВС .Cells(1, 1) = "Боб" .Ячейки(1, 2) = "555-5555" .Cells(2, 1) = "Сэм" .Ячейки(2, 2) = "555-1234" .Cells(3, 1) = "Джо" .Ячейки(3, 2) = "555-9876" Конец с '------------------ 'Загружаем диапазон в массив вариантов 'Это всегда создает массив из двух измерений (строки, столбцы) на основе 1. 'обратите внимание на .value в конце a = ws.Range("A1:B3").Значение '------------------ 'Записать на лист снова - размер диапазона назначения соответствует правильным размерам ws.Cells(1, 4).Resize(UBound(a, 1), UBound(a, 2)).Value = a Конец суб
Я сделал перерыв в VBA, чтобы изучить Ruby
Нажмите, чтобы развернуть…
Когда я увидел ваш код, я подумал, что это Python…
Голосовать за
0
Джиндон
MrExcel MVP
#5
Шенри сказал:
Привет всем,
Я хотел бы перебрать диапазон рабочих листов и создать вложенный массив, который выглядит примерно так:
test_array = [ [ [«Боб», «555-5555»], [«Сэм», «555 -1234»] ] , [«Джо», «555-9876»] ]
… Я подозреваю, что синтаксис моего массива неверен … это просто для того, чтобы дать представление о том, как я хочу вложить.Если я хочу вложить два массива в позицию 0 супермассива, могу ли я…
test_array[0][0] = [«Боб», «555-5555»]
test_array[0][1] = [«Sam», «555-1234»]Приветствуется любая помощь по вложению, а также соответствующий синтаксис массива VBA.
Ш
Нажмите, чтобы развернуть…
Если вы сохраняете значения в переменной массива из диапазона.
Богатый (код BB):
Дим. как вариант а = Диапазон ("a1:b100"). Значение Для i = LBound(a,1) до UBound(a,1) Для ii = LBound(a,2) в UBound(a,2) MsgBox "a(" & i & "," & ii & ") = " & a(i,ii) Следующий Следующие
Может одновременно принимать все значения в 2D-массиве.
В противном случае поищите в сети о « VBA Jagged Array »
Голосовать за
0
ксену
MrExcel MVP
#6
Это показалось полезным:
http://www.ozgrid.com/forum/showthread.php?t=71088
Возможно, разделение — это еще один способ создания массивов при определенных обстоятельствах:
http://visualbasic. about. com/b/2007/05/11/initializing-a-jagged-array.htm
AB
Голосовать за
0
Вы должны войти или зарегистрироваться, чтобы ответить здесь.
Sense Check — Как лучше всего выполнить эту задачу
- TheRedCardinal
- Вопросы Excel
- Ответы
- 2
- просмотров
- 247
Peter_SSs
Захват и вызов элементов в динамическом массиве VBA
- moltke
- Вопросы Excel
- Ответы
- 1
- просмотров
- 153
вне очереди
Ранний выход из фиксированного массива (VBA)
- hellfire45
- Вопросы Excel
- Ответы
- 2
- просмотров
- 100
hellfire45
Преобразование массива 1d в массив 2d
- ToExcelOrNotToExcel
- Вопросы Excel
- Ответы
- 4
- просмотров
- 427
Peter_SSs
Преобразование вложенного уравнения IfThen в макрос VBA для диапазона ячеек
- WAB13
- Вопросы Excel
- Ответы
- 6
- просмотров
- 153
Алекс Блэкенбург
Делиться:
Фейсбук
Твиттер
Реддит
Пинтерест
Тамблер
WhatsApp
Электронная почта
Делиться
Связь
Многомерный массив в VBA | Доска сообщений MrExcel
Арифос
Известный член
#2
Стивенн сказал:
Как сделать такой многомерный массив:
[[«Имя 1», [«А», «Б», «С»]], [«Имя 2», [«Д», «Е», » F», «G», «H» ] ], [ «Name 3», [ «I» ] ] ]
Всего три группы, каждая из которых имеет имя. Я не знаю, как создавать и заполнять такие массивы в VBA и как их наконец распечатать.
Нажмите, чтобы развернуть…
Код:
Public Type myRecord 'создание ваших измерений таким образом Имя как строка Типы как строка Конечный тип Sub populate_Name() Dim Records () как myRecord Записи ReDim (от 0 до 10) Records(0).Name = "Name1" 'сохраните его так, вы можете зацикливаться на ячейках листа и т. д. здесь records(0).Types = "A, B, C, что угодно" ' и так, это может быть значение из ячейки Sheets(1). Cells(1, 1).Value = records(0).Name ' Это установит ячейку A1 на листе 1 равной «Name1», которая хранится в этой позиции записи/массива. Конец суб
Это то, что я делаю, могут быть более простые способы сделать это, но это легко понять и работает для меня
Голосовать за
0
Арифос
Известный член
#3
Вам могут понадобиться более глубокие слои, поэтому взгляните на это, вы можете продолжить в том же духе для 63 измерений, я думаю… (это много)
Код:
Опция Явная Общедоступный тип TypesOfTypes A как строка B как строка C As String 'вы можете продолжать и продолжать здесь Конечный тип Public Type myRecord 'создание ваших измерений таким образом Имя как строка Типы как типы типов Конечный тип Sub populate_Name() Dim Records () как myRecord Записи ReDim (от 0 до 10) Records(0). Name = "Name1" 'сохраните его так, вы можете зацикливаться на ячейках листа и т. д. здесь Records(0).Types.A = "Хранилище" ' и так, это может быть значение из ячейки Листы(1).Ячейки(1, 1).Значение = записи(0).Имя Листы(1).Ячейки(1, 2).Значение = записи(0).Типы.A Конец суб
Голосовать за
0
Стивенн
Активный член
#4
Спасибо за ответ. Решение было бы хорошим, если бы количество хранимых значений было фиксированным, но я должен сделать его более динамичным, так как иногда может быть много значений, а иногда только несколько или ни одного.
Голосовать за
0
pgc01
MrExcel MVP
#5
РЕКЛАМА
Здравствуйте
Я плохо понимаю что вам нужно, откуда и в каком формате берутся данные, что с ними нужно делать и т.д.
Просто с точки зрения синтаксиса, может быть много возможных ответов, это один с использованием зубчатого массива:
Код:
Опция Явная Опция База 1 Подтест() Dim vArr(от 1 до 3, от 1 до 2) как вариант vArr(1, 1) = "Имя 1": vArr(1, 2) = Array("A", "B", "C") vArr(2, 1) = "Имя 2": vArr(2, 2) = Array("D", "E", "F", "G", "H") vArr(3, 1) = "Имя 3": vArr(3, 2) = Array("I") MsgBox vArr(1, 1) MsgBox vArr(2, 2)(4) Конечный переходник
Надеюсь, это поможет
Голосовать за
0
Арифос
Известный член
#6
Ясно, вы могли бы просто сделать хранилище большим и добавить оператор IF, чтобы исправить «второе» измерение? Вы хотели бы, чтобы второе измерение содержало разные «хранилища», от «А» до «Я»? но если только «я» существует в примере: [ «Имя 3», [ «Я» ] ], , например, в записях (5), тогда записи 5 дадут вам только информацию «Я»?
Голосовать за
0
Стивенн
Активный член
#7
РЕКЛАМА
pgc01 сказал:
Привет
Я плохо понимаю, что вам нужно, откуда берутся данные и в каком формате, что с ними нужно делать и т. д.
Просто с точки зрения синтаксиса вариантов ответов было бы много, здесь используется зубчатый массив:
Код:
Опция Явная Опция База 1 Подтест() Dim vArr(от 1 до 3, от 1 до 2) как вариант vArr(1, 1) = "Имя 1": vArr(1, 2) = Array("A", "B", "C") vArr(2, 1) = "Имя 2": vArr(2, 2) = Array("D", "E", "F", "G", "H") vArr(3, 1) = "Имя 3": vArr(3, 2) = Array("I") MsgBox vArr(1, 1) MsgBox vArr(2, 2)(4) Конец субНадеюсь это поможет
Нажмите, чтобы развернуть…
Я думаю, это именно то, что я хочу.
Как перебрать массив? Я пробовал
Код:
Публичный подтест() Dim vElement1 как вариант Dim vElement2 как вариант Dim vArr(от 1 до 3, от 1 до 2) как вариант vArr(1, 1) = "Группа 1" vArr(1, 2) = Массив("1234", "2345", "3456") vArr(2, 1) = "Группа 2" vArr(2, 2) = Массив("4567", "8765", "3214", "4123", "5773") vArr(3, 1) = "Группа 3" vArr(3, 2) = Массив("8884") Для каждого vElement1 в vArr Отладка. Печать vElement1 Для каждого vElement2 в vElement1 Отладка. Печать vElement2 Следующий vElement2 Следующий vElement1 Конец суб
Последнее редактирование:
Проголосовать за
0
Арифос
Известный член
#8
Зацикливать информацию в массиве или из него?
В любом случае, если вы посмотрите на окно местных жителей, вы увидите адреса массива
из вашего массива
vArr(2,2)(3) = «4123»
Используйте эту информацию для создания смарт-цикла/оператора for
Последнее редактирование:
Голосование за
0
Арифос
Известный член
#9
Я сделал пример «зацикливания» информации.
Код:
Публичный дополнительный тест() Dim vArr(от 1 до 3, от 1 до 2) как вариант vArr(1, 1) = "Группа 1" vArr(1, 2) = Массив("1234", "2345", "3456") vArr(2, 1) = "Группа 2" vArr(2, 2) = Массив("4567", "8765", "3214", "4123", "5773") vArr(3, 1) = "Группа 3" vArr(3, 2) = Массив("8884") Листы(1).Выбрать Для i = от 1 до 5 Ячейки (i, 1). Значение = vArr (i, 1) Для j = от 0 до 5 При ошибке Возобновить Далее Ячейки (i, j + 2) = vArr (i, 2) (j) Если j = 5, то перейти к следующему vArr Следующий j следующийvАрр: Далее я При ошибке Перейти к 0 Конец суб
Вы можете сделать свои диапазоны для i и j более удобными для вас. Хотя я не уверен, как получить этот счет из массива. :С
Последнее редактирование:
Голосование за
0
pgc01
MrExcel MVP
#10
Стивенн сказал:
Я думаю, это именно то, что я хочу.
Как перебрать массив? Я пробовал
Код:
Публичный подтест() Dim vElement1 как вариант Dim vElement2 как вариант Dim vArr(от 1 до 3, от 1 до 2) как вариант vArr(1, 1) = "Группа 1" vArr(1, 2) = Массив("1234", "2345", "3456") vArr(2, 1) = "Группа 2" vArr(2, 2) = Массив("4567", "8765", "3214", "4123", "5773") vArr(3, 1) = "Группа 3" vArr(3, 2) = Массив("8884") Для каждого vElement1 в vArr Отладка. Печать vElement1 Для каждого vElement2 в vElement1 Отладка. Печать vElement2 Следующий vElement2 Следующий vElement1 Конец субНажмите, чтобы развернуть…
Привет
Есть несколько вариантов.
Вы можете использовать свою информацию о структуре зубчатого массива, например
— неопределенное количество строк, но всегда 2 столбца
— первый элемент в каждой строке является строкой, второй массив с неопределенным количеством элементов
Это позволяет сделать интеллектуальную печать, например:
Код:
Опция Явная
Опция База 1
Публичный дополнительный тест1()
Dim i As Long, K As Long
Dim vArr(от 1 до 3, от 1 до 2) как вариант
vArr(1, 1) = "Группа 1"
vArr(1, 2) = Массив("1234", "2345", "3456")
vArr(2, 1) = "Группа 2"
vArr(2, 2) = Массив("4567", "8765", "3214", "4123", "5773")
vArr(3, 1) = "Группа 3"
vArr(3, 2) = Массив("8884")Для i = 1 To UBound(vArr)
Отладка.