Vba вложенные массивы: VBA Excel. Массивы (одномерные, многомерные, динамические)
Содержание
НОУ ИНТУИТ | Лекция | Массивы, циклы, принятие решений
< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Аннотация: Лекция посвящена описанию основных программных конструкций VBA. Здесь будет освещена работа с массивами, циклами, операторами принятия решений. Так же в этой лекции мы поговорим о работе с внешними файлами.
Ключевые слова: программа, массив, размерность, именованные переменные, VBA, динамический массив, нумерация, индекс, полезность, информация, ключевое слово, цикла, переменная, значение, Приращение, счетчик, excel, preservation, список аргументов, имя переменной, размерность массива, команда, память, объект, цикл с предусловием, цикл с постусловием, функция, операторы, пароль, пользователь, логический оператор, имя пользователя, объектная переменная, шаблон, анализ, произвольное, оператор безусловного перехода, место, слово, цикл вывода, файлы, word, поиск, файл, путь, текущая директория, папка, параметр, опреатор принятия решений
7.1. Массивы
Как быть, если нужно работать со списком из 20 фамилий? А если их будет 50, 1000 или их количество должно быть определено в ходе выполнения программы?
Для обработки больших объемов информации использовать переменные неудобно. Что же делать? Ответ прост: использовать массивы.
Массив — это именованный набор индексированных ячеек. Ячейки так же называют элементами или индексированными переменными.
У каждого массива 5 основных характеристик: имя, размерность, число элементов, номер первого элемента и тип элементов.
-
Имя — правила именования массивов аналогичны правилам именования переменных.
-
Размерность — одномерные массивы напоминают одну строку таблицы, каждая ячейка которой содержит какие-то данные. Многомерные массивы имеют больше измерений. Их можно сравнивать с таблицами, имеющими множество строк и столбцов и с наборами таблиц.
-
Нумерация элементов подчиняется следующим правилам:
- По умолчанию нумерация элементов массива начинается с 0. Первый по счету элемент получит индекс 0, второй — 1 и т.д.
- В объявлении отдельного массива можно явно указать индекс его первого и последнего элемента, разделив их ключевым словом To.
- Если вы хотите, чтобы индексы всех массивов начинались с 1, добавьте в раздел объявлений модуля (вне процедур, функций и обработчиков событий) команду Option Base 1.
-
Тип — подчиняется тем же правилам, которые мы ранее рассмотрели для переменных. Если пользователь не указал его явно, массив получит тип по умолчанию — Variant. Это требует больше системных ресурсов, но позволяет обрабатывать значения различных типов.
Не всегда количество элементов и размерность массива известны до начала работы программы. VBA умеет работать с динамическими массивами, параметры которых можно менять в ходе выполнения программы. О них мы поговорим ниже.
7.2. Одномерные массивы
07-01-Одномерный массив.docm- пример к п. 7.2.
Для объявления массивов используют оператор Dim. Объявить массив можно двумя способами. Первый заключается в указании общего количества элементов. Например, так:
Dim MyArrayA(30) As Singleintuit.ru/2010/edi»>Объявленный массив MyArrayА содержит 31 элемент (с индексами от 0 до 30) типа Single. Поскольку нумерация явно не задана, элементы получат индексы по обычным правилам.
Можно объявить массив и другим способом:
Dim MyArrayB(1 To 25)
Массив MyArrayB содержит 25 элементов. Границы нумерации заданы явно — первый элемент получит индекс 1, второй — 2 и т.д. Тип не указан — в массиве можно хранить любые данные.
Работа с элементами массива ничем не отличается от работы с переменными. Давайте решим следующую задачу:
- Объявить одномерный массив на 3 элемента
- Внести в первый элемент число 5 в программе, во второй — запросив значение с помощью окна ввода
- Вычислить в третьем элементе массива произведение значений, хранящихся в первом и втором элементах.
- Вывести полученное значение в окне сообщения.
Решение задачи приведено в листинге 7.1.
Dim A(2) A(0) = 5 A(1) = InputBox("Введите значение второго элемента") A(2) = A(0) * A(1) MsgBox A(2)
Листинг
7.1.
Работа с массивом
В конце работы программы, если на вопрос о вводе числа мы введем число 2, массив A будет иметь такой вид — табл. 7.1.
Индекс | 0 | 1 | 2 |
---|---|---|---|
Значение | 5 | 2 | 10 |
Возможно, сейчас вы еще не вполне осознаете полезность массивов. Если сейчас вы напишите программу для ручного ввода данных в несколько элементов массива, она получится такой же громоздкой, как раньше. Так чем же массивы лучше? Ответ на этот вопрос кроется в использовании циклов.
7.3. Циклы
Циклы позволяют выполнять одни и те же команды много раз. В табл. 7.2. собрана информация об основных видах циклов.
Название цикла | Вид |
---|---|
For — Next | С фиксированным количеством повторов. |
While — Wend | С предусловием. Если не верно условие, заданное на входе в цикл, может не выполниться ни разу |
Do — Loop | С постусловием. Выполняется по меньшей мере один раз. |
7.4. Цикл For — Next
07-02-Цикл For-Next.docm — пример к п. 7.4.
Решим задачу: вывести цифры от 1 до 10 в окнах сообщений. Ее можно решить и без использования циклов, написав 10 строк такого вида: MsgBox («1»). А вот конструкция For — Next позволяет делать то же самое гораздо изящнее. В листинге 7.2. вы можете найти решение задачи.
For i = 1 To 10 MsgBox (i) Next i
Листинг
7. 2.
Вывод цифр от 1 до 10 в цикле
Ключевое слово For задает начало цикла. После него следует переменная i, которая увеличивается при каждом проходе цикла. В ходе работы конструкции For — Next значение i изменяется от 1 до 10.
Начальное значение счетчика устанавливается при входе в цикл. Мы просто приравниваем i какому-либо числу. Конечное значение переменной задается после ключевого слова To. Переменная i доступна внутри цикла — ведь именно ее мы выводим в окне сообщения.
Ключевое слово Next с указанием переменной, к которой оно относится, закрывает цикл.
В качестве первого и последнего значения счетчика цикла можно использовать какую-нибудь переменную. Она может быть определена в ходе выполнения программы, но до входа в конструкцию For — Next.
intuit.ru/2010/edi»>Вы могли заметить, что переменная цикла меняется с приращением 1. Это приращение можно задать в явном виде с помощью ключевого слова Step. В листинге 7.3. вы можете видеть пример оператора For — Next, выводящего нечетные числа в диапазоне от 1 до 10.For i = 1 To 10 Step 2 MsgBox (i) Next i
Листинг
7.3.
Вывод нечетных цифр в диапазоне от 1 до 10 в цикле
С помощью ключевого слова Step можно создать не только возрастающий, но и убывающий счетчик. Для этого в Step надо указать отрицательное число и проследить за тем, чтобы первое значение переменной цикла было больше последнего. Например, так: For i=10 to 1 Step -1. Первое значение переменной в таком цикле будет равняться 10, второе — 9 и т.д. — до 1.
Теперь перейдем к совместному использованию циклов и массивов. Напишем программу, которая предлагает пользователю ввести 10 фамилий, сохраняет их в массиве, а потом выводит в окнах сообщений.
Готовая программа приведена в листинге 7.4.
Dim MyArray(9) For i = 0 To 9 MyArray(i) = InputBox("Введите фамилию №" & i + 1) Next i For i = 0 To 9 'Начало еще одного цикла MsgBox ("Фамилия №" & (i + 1) & " " & MyArray(i)) Next i 'Конец цикла
Листинг
7.4.
Ввод и вывод 10 фамилий
Обсудив цикл типа For-Next, продолжим разговор о массивах. На очереди — многомерные массивы.
7.5. Многомерные массивы
07-03-Многомерные массивы.docm — пример к п. 7.5.
Многомерные массивы имеют несколько измерений. Чаще всего применяются двумерные массивы (матрицы). Матрицу можно представить в виде обычной таблицы с несколькими строками и столбцами.
Для того чтобы объявить двумерный массив, нужно воспользоваться командой Dim с указанием размерности каждого из измерений. Остальные правила объявления таких массивов и работы с ними аналогичны таковым для одномерных массивов. Например, мы можем указать лишь размеры измерения массива:
Dim MyArrayA(10, 1) As Single
Массив MyArrayА содержит 11 строк и 2 столбца типа Single.
Можно в явном виде задать границы размерностей:
Dim MyArrayB(1 To 25, 1 To 5)
Массив MyArrayB содержит 25 строк и 5 столбцов. Границы нумерации заданы явно. Тип не указан — в массиве можно хранить любые данные.
В листинге 7.5. приведен пример программы, которая объявляет двумерный массив 5х2 и предлагает ввести в него фамилии и номера телефонов сотрудников.
Dim MyArray(1 To 5, 1 To 2) For i = 1 To 5 MyArray(i, 1) = InputBox("Введите фамилию №" & i) MyArray(i, 2) = InputBox("Введите Телефон №" & i) Next i
Листинг
7.5.
Работа с массивом размерностью 5х2
В табл. 7.3. вы можете видеть массив MyArray после заполнения его фамилиями и номерами телефонов. В MyArray (1,1) мы внесли фамилию «Иванов», в MyArray (1,2) — телефон Иванова 898989898 и т.д.
Индекс | 1 | 2 |
---|---|---|
1 | Иванов | 898989898 |
2 | Петров | 343434343 |
3 | Сидоров | 565656565 |
4 | Александров | 121111212 |
5 | Маринин | 545454544 |
Один цикл неудобно использовать для работы с массивами больших размерностей. Нетрудно представить себе, какой громоздкой получится решение задачи копирования одной матрицы 100х100 в другую такую же. Кстати, при обработке данных в Microsoft Excel вам постоянно придется обращаться с большими двумерными матрицами. К счастью, существует механизм вложенных циклов, который помогает решать подобные задачи.
7.6. Вложенные циклы For-Next
07-04-Вложенные циклы.docm — пример к п. 7.6.
Принцип работы вложенных циклов кроется в их названии. Все очень просто — один цикл вкладывается в другой. Например, для заполнения массива 10х10 случайными целыми числами от 1 до 10 можно написать такую программу (листинг 7. 6.)
Dim MyArray(1 To 10, 1 To 10) For i = 1 To 10 For j = 1 To 10 MyArray(i, j) = Int(Rnd(1) * 10) Next j Next i
Листинг
7.6.
Работа с массивом 10х10
Внешний цикл ( i ) выполняется один раз, после чего внутренний ( j ) — десять раз. За один проход внешнего цикла внутренний выполняет десять — заполняется первая строка массива (с индексами от 1,1 до 1,10) и т.д.
Дальше >>
< Лекция 6 || Лекция 7: 123 || Лекция 8 >
Циклы 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
SHenry
Обычная доска
-
-
#1
Привет всем,
Я хочу перебрать диапазон рабочих листов и создать вложенный массив, который выглядит примерно так:
test_array = [ [ [«Боб», «555-5555»], [«Сэм», «555-1234»] ], [«Джо», «555-9876»] ]
… Я подозреваю, что синтаксис моего массива неверен. .. это просто для того, чтобы дать представление о том, как я хочу вложить.
Если я хочу вложить два массива в позицию 0 супермассива , я бы…
test_array[0][0] = [«Боб», «555-5555»]
test_array[0][1] = [«Сэм», «555-1234»]
Любой приветствуется помощь по вложению, а также соответствующий синтаксис массива VBA
SH
Может ли формула пронзать листы?
Щелкните здесь, чтобы открыть ответ
Используйте =СУММ(Январь:Декабрь!E7) для суммирования E7 на всех листах с января по декабрь
ксену
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 перед установкой или возвратом элемента.
Возможно, еще одним вариантом является пользовательский объект класса с определяемыми пользователем свойствами?
С уважением
Шенри
Обычная доска
-
-
#3
Александр,
Спасибо за ответ… Завтра поиграю с вашим методом вложенности массивов, а также с объектом словаря.
Я сделал перерыв в работе с VBA, чтобы изучить Ruby, и теперь возвращение к VBA в некотором роде синтаксически болезненно… Да, немного не в восторге было бы правильно.
Еще раз спасибо
SH
ксену
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…
Джиндон
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 »
ксену
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
Вы должны войти или зарегистрироваться, чтобы ответить здесь.
Как получить доступ к массиву, созданному с помощью массивов?
- Xbox_360
- Вопросы Excel
- Ответы
- 5
- просмотров
- 290
Xbox_360
Можно ли ввести «массив выражений» в качестве ссылки в параметре формулы (или в ячейке)?
- Рнхч
- Вопросы Excel
2
- Ответы
- 18
- просмотров
- 480
Рнхч
Как найти положение максимального значения в массиве VBA?
- аджей1111
- Вопросы Excel
- Ответы
- 5
- просмотров
- 420
Alex Blakenburg
Случайный выбор строкового элемента из массива
- Retroshift
- Вопросы Excel
- Ответы
- 3
- просмотров
- 147
Trebor76
Создание массива из диапазона и сохранение 0 строки/столбца
- Джарденп
- Вопросы Excel
- Ответы
- 3
- просмотров
- 176
Пух
Делиться:
Фейсбук
Твиттер
Реддит
Пинтерест
Тамблер
WhatsApp
Эл. адрес
Делиться
Ссылка на сайт
Многомерный массив в VBA | Доска сообщений MrExcel
Arithos
Известный член
-
-
#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», которая хранится в этой позиции записи/массива. Конец суб
Это то, что я делаю, могут быть более простые способы сделать это, но это легко понять и работает для меня
Арифос
Известный член
-
-
#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 Конец суб
Стивенн
Активный член
-
-
#4
Спасибо за ответ. Решение было бы хорошим, если бы количество хранимых значений было фиксированным, но я должен сделать его более динамичным, так как иногда может быть много значений, а иногда только несколько или ни одного.
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) Конечный переходник
Надеюсь, это поможет
Арифос
Известный член
-
-
#6
Ясно, вы могли бы просто сделать хранилище большим и добавить оператор IF, чтобы исправить «второе» измерение? Вы хотели бы, чтобы второе измерение содержало разные «хранилища», от «А» до «Я»? но если в примере существует только «я»: [ «Имя 3», [ «я»]], , например, в записях (5), тогда записи 5 дадут вам только информацию «я»?
Стивенн
Активный член
-
-
#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 Конец суб
Последнее редактирование:
Арифос
Известный член
-
-
#8
Зацикливать информацию в массиве или из него?
В любом случае, если вы посмотрите на окно местных жителей, вы увидите адреса массива
из вашего массива
vArr(2,2)(3) = «4123»
Используйте эту информацию для создания смарт-цикла/оператора for
Последнее редактирование:
Арифос
Известный член
-
-
#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 более удобными для вас. Хотя я не уверен, как получить этот счет из массива. :С
Последнее редактирование:
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)
Отладка.