In this Article
- Multi-Dimensional Array (2D Arrays)
- Declare a 2D Array
- Populating a 2D Array
- Populating a 2D Array from Excel data
- Resizing using ReDim and Re-Dim Preserve
This tutorial will discuss 2-d and multi-dimensional arrays in VBA.
Multi-Dimensional Array (2D Arrays)
Multi-dimensional Arrays are arrays that contain more than one dimension, usually two or three dimensions, but arrays can have up to 32 dimensions.
Declare a 2D Array
To create an array with more than one dimension, use commas to define each separate dimension:
Dim intArr(2,3) as Integer
Populating a 2D Array
The code below will populate a 2D array, and then populate the rows and columns of a worksheet with the values in the array.
Sub Populate2D()
'declare the 2D array
Dim intA(2, 3) As Integer
'declare variables
Dim rw As Integer
Dim col As Integer
'populate the array
intA(0, 0) = 45
intA(0, 1) = 50
intA(0, 2) = 55
intA(0, 3) = 60
intA(1, 0) = 65
intA(1, 1) = 70
intA(1, 2) = 75
intA(1, 3) = 80
intA(2, 0) = 85
intA(2, 1) = 90
intA(2, 2) = 95
intA(2, 3) = 100
'loop through the array and populate Excel
For rw = 0 To 2
For col = 0 To 3
Cells(rw + 1, col + 1).Value = intA(rw, col)
Next col
Next rw
End Sub
Your Excel spreadsheet should then be populated as follows.
Populating a 2D Array from Excel data
The code below will populate a 2D array from an Excel worksheet and then populate a different sheet with the data.
Sub Populate2D()
'Declare the worksheets
Dim ws_Source As Worksheet
Dim ws_Destination As Worksheet
'Declare the array
Dim wsData(10, 2) As Variant
'Declare the variables
Dim rw as Integer
Dim col As Integer
'refer to the source sheet
Set ws_Source = Worksheets("Sheet1")
'get the information from the source sheet and populate the array
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
wsData(rw, col) = ws_Source.Range("A2").Offset(rw, col).Value
Next col
Next rw
'refer to the destation sheet
Set ws_Destination = Worksheets("Sheet2")
' populate the destination sheet from the array
For rw = LBound(wsData, 1) To UBound(wsData, 1)
For col = LBound(wsData, 2) To UBound(wsData, 2)
ws_Destination.Range("A1").Offset(rw,col).Value = wsData(rw, col)
Next col
Next rw
End Sub
Resizing using ReDim and Re-Dim Preserve
You can resize an array using ReDim (learn more).
Sub Resize2D()
'declare the array
Dim varArray() as Variant
'declare the size of the array
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Accountant"
varArray(1, 1) = "Secretary"
varArray(1, 2) = "Doctor"
'redeclare the size of the array
ReDim varArray(0, 1)
'repopulate the array
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
End Sub
When you redeclare the array, you will lose any data previously held in the array unless you use the ReDim Preserve Statement.
Sub Resize2D()
'declare the array
Dim varArray() as Variant
'declare the size of the array
ReDim varArray(1, 2)
varArray(0, 0) = "Mel Smith"
varArray(0, 1) = "Fred Buckle"
varArray(0, 2) = "Jane Eyre"
varArray(1, 0) = "Accountant"
varArray(1, 1) = "Secretary"
varArray(1, 2) = "Doctor"
'redeclare the size of the array
ReDim Preserve varArray(1, 3)
'populate the array with additional values
varArray(0, 3) = "Rob Barnes"
varArray(1, 3) = "Plumber"
End Sub
You can only resize the last dimension of an Array if want to keep the original data in the Array with Re-Dim Preserve.
When you click debug, the error will be highlighted showing that the first dimension in the array is not the same as the first dimension when the array size was originally declared.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Learn More!
Массивы в VBA Excel: одномерные, многомерные и динамические. Объявление и использование массивов. Операторы Public, Dim и ReDim. Функции Array, LBound, UBound.
Массивы – это множества однотипных элементов, имеющих одно имя и отличающиеся друг от друга индексами. Они могут быть одномерными (линейными), многомерными и динамическими. Массивы в VBA Excel, как и другие переменные, объявляются с помощью операторов Dim и Public. Для изменения размерности динамических массивов используется оператор ReDim. Массивы с заранее объявленной размерностью называют статическими.
Одномерные массивы
Объявление одномерных (линейных) статических массивов в VBA Excel:
Public Massiv1(9) As Integer Dim Massiv2(1 To 9) As String |
В первом случае публичный массив содержит 10 элементов от 0 до 9 (нижний индекс по умолчанию — 0, верхний индекс — 9), а во втором случае локальный массив содержит 9 элементов от 1 до 9.
По умолчанию VBA Excel считает в массивах нижним индексом нуль, но, при желании, можно сделать нижним индексом по умолчанию единицу, добавив в самом начале модуля объявление «Option Base 1».
Многомерные массивы
Объявление многомерных статических массивов в VBA Excel аналогично объявлению одномерных массивов, но с добавлением размерностей дополнительных измерений через запятую:
‘Массив двухмерный Public Massiv1(3, 6) As Integer ‘Массив трехмерный Dim Massiv2(1 To 6, 1 To 8, 1 To 5) As String ‘Массив четырехмерный Dim Massiv3(9, 9, 9, 9) As Date |
Третий массив состоит из 10000 элементов — 10×10×10×10.
Динамические массивы
Динамические массивы в VBA Excel, в отличие от статических, объявляются без указания размерности:
Public Massiv1() As Integer Dim Massiv2() As String |
Такие массивы используются, когда заранее неизвестна размерность, которая определяется в процессе выполнения программы. Когда нужная размерность массива становится известна, она в VBA Excel переопределяется с помощью оператора ReDim:
Public Massiv1() As Integer Dim Massiv2() As String ReDim Massiv1(1 To 20) ReDim Massiv2(3, 5, 4) |
При переопределении размерности массива вместо верхнего индекса можно использовать переменную:
Dim Massiv1() as Variant, x As Integer x = 20 ReDim Massiv1(1 To x) |
Переопределять размерность динамических массивов в процессе работы программы можно неоднократно, как по количеству измерений, так и по количеству элементов в измерении.
С помощью оператора ReDim невозможно изменить обычный массив, объявленный с заранее заданной размерностью. Попытка переопределить размерность такого массива вызовет ошибку компиляции с сообщением: Array already dimensioned (Массив уже измерен).
При переопределении размерности динамических массивов в VBA Excel теряются значения их элементов. Чтобы сохранить значения, используйте оператор Preserve:
Dim Massiv1() As String ——— операторы ——— ReDim Massiv1(5, 2, 3) ——— операторы ——— ReDim Preserve Massiv1(5, 2, 7) |
Обратите внимание!
Переопределить с оператором Preserve можно только последнюю размерность динамического массива. Это недоработка разработчиков, которая сохранилась и в VBA Excel 2016. Без оператора Preserve можно переопределить все размерности.
Максимальный размер
Размер массива – это произведение длин всех его измерений. Он представляет собой общее количество элементов, содержащихся в данный момент в массиве.
По информации с сайта разработчиков, максимальный размер массивов зависит от операционной системы и доступного объема памяти. Использование массивов, размер которых превышает объем доступной оперативной памяти компьютера, приводит к снижению скорости, поскольку системе необходимо выполнять запись данных и чтение с диска.
Использование массивов
Приведу два примера, где не обойтись без массивов.
1. Как известно, функция Split возвращает одномерный массив подстрок, извлеченных из первоначальной строки с разделителями. Эти данные присваиваются заранее объявленному строковому (As String) одномерному динамическому массиву. Размерность устанавливается автоматически в зависимости от количества подстрок.
2. Данные в массивах обрабатываются значительно быстрее, чем в ячейках рабочего листа. Построчную обработку информации в таблице Excel можно наблюдать визуально по мерцаниям экрана, если его обновление (Application.ScreenUpdating) не отключено. Чтобы ускорить работу кода, можно значения из диапазона ячеек предварительно загрузить в динамический массив с помощью оператора присваивания (=). Размерность массива установится автоматически. После обработки данных в массиве кодом VBA полученные результаты выгружаются обратно на рабочий лист Excel. Обратите внимание, что загрузить значения в диапазон ячеек рабочего листа через оператор присваивания (=) можно только из двумерного массива.
Функции Array, LBound, UBound
Функция Array
Функция Array возвращает массив элементов типа Variant из первоначального списка элементов, перечисленных через запятую. Нумерация элементов в массиве начинается с нуля. Обратиться к элементу массива можно, указав в скобках его номер (индекс).
Sub Test1() Dim a() As Variant a = Array(«text», 25, «solo», 35.62, «stop») MsgBox a(0) & vbNewLine & a(1) & vbNewLine _ & a(2) & vbNewLine & a(3) & vbNewLine & a(4) End Sub |
Скопируйте код в модуль VBA Excel и запустите его на выполнение. Информационное сообщение MsgBox покажет значения массива, извлеченные по индексу.
Функция LBound
Функция LBound возвращает значение типа Long, равное наименьшему (нижнему) доступному индексу в указанном измерении массива.
Синтаксис:
LBound (arrayname[, dimension])
- arrayname — это имя переменной массива, является обязательным аргументом;
- dimension — это номер измерения массива, необязательный аргумент, по умолчанию принимает значение 1.
Наименьший индекс по-умолчанию может быть равен 0 или 1 в зависимости от настроек оператора Option Base. Нижняя граница архива, полученного с помощью функции Array, всегда равна 0.
При объявлении переменных массивов или переопределении их размерности наименьшие индексы могут быть любыми целыми числами, в том числе отрицательными.
Функция UBound
Функция UBound возвращает значение типа Long, равное наибольшему (верхнему) доступному индексу в указанном измерении массива.
Синтаксис:
UBound( arrayname[, dimension])
- arrayname — это имя переменной массива, является обязательным аргументом;
- dimension — это номер измерения массива, необязательный аргумент, по умолчанию принимает значение 1.
Функция UBound используется вместе с функцией LBound для определения размера массива.
Sub Test2() Dim a(—2 To 53) As String MsgBox «Наименьший индекс = « & LBound(a) & _ vbNewLine & «Наибольший индекс = « & UBound(a) End Sub |
Скопируйте код в модуль VBA Excel и запустите его на выполнение. Информационное сообщение MsgBox покажет значения наименьшего и наибольшего индекса переменной массива a.
Обход массива циклом
Обход одномерного массива циклом For… Next, в котором для определения границ массива используются функции UBound и LBound:
Sub Test3() Dim a() As Variant, i As Long a = Array(«text», 25, «solo», 35.62, «stop») For i = LBound(a) To UBound(a) Debug.Print «a(« & i & «) = « & a(i) Next End Sub |
Результат работы цикла вы увидите в окне Immediate.
Очистка (обнуление) массивов
Первый способ
Очистить любой массив, статический или динамический, без использования цикла можно с помощью оператора Erase. Термин «обнуление» можно применить только к массиву числового типа.
Dim Massiv1(4, 3) As String, Massiv2() As Variant ——— операторы ——— ‘переопределяем динамический массив ReDim Massiv2(2, 5, 3) ——— операторы ——— ‘очищаем массивы Erase Massiv1 Erase Massiv2 |
Обратите внимание, что оба массива при таком способе очистки будут возвращены в исходное состояние, которое они имели сразу после объявления:
- статический Massiv1 сохранит размерность (4, 3);
- динамический Massiv2 не сохранит размерность ().
Второй способ
Динамический массив можно очистить (обнулить) без использования цикла с помощью оператора ReDim. Просто переопределите его с той же размерностью.
Dim Massiv() As Double ——— операторы ——— ‘переопределяем массив ReDim Massiv(5, 6, 8) ——— операторы ——— ‘очищаем массив ReDim Massiv(5, 6, 8) |
Содержание
- Использование массивов
- Изменение нижней границы
- Хранение значений Variant в массивах
- Использование многомерных массивов
- См. также
- Поддержка и обратная связь
- VBA Multi-Dimensional Array (2D Arrays)
- Multi-Dimensional Array (2D Arrays)
- Declare a 2D Array
- Populating a 2D Array
- Populating a 2D Array from Excel data
- Resizing using ReDim and Re-Dim Preserve
- VBA Coding Made Easy
- VBA Code Examples Add-in
- Использование двумерных массивов в VBA на уроках информатики
- Библиографическое описание:
- Похожие статьи
- Алгоритм интервального оценивания параметров нелинейных.
- Методика проведения лабораторной работы по дисциплине.
- Анализ эффективности алгоритмов сортировки и вcтроенных.
- Использование алгоритмов нечеткого поиска при решении задачи.
- Размножение объектов массивом в системе моделирования.
- Сравнительный анализ алгоритмов сортировки данных в массивах
- Методика формирования информационных файлов для.
- Алгоритмические аспекты доминирования в графах
- Заполнение двумерного массива vba excel
Использование массивов
Можно объявить массив для работы с набором значений одного типа данных. Массив представляет собой одиночную переменную с множеством ячеек для хранения значений, тогда как типовая переменная имеет только одну ячейку хранилища, в которой может храниться только одно значение. Следует обращаться к массиву как одному целому, когда необходимо сослаться на все значения, хранящиеся в нем, или можно обращаться к отдельным элементам.
Например, чтобы хранить ежедневные расходы по каждому дню года, можно объявить одну переменную массива с 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 Multi-Dimensional Array (2D Arrays)
In this Article
This tutorial will discuss 2-d and multi-dimensional arrays in VBA.
Multi-Dimensional Array (2D Arrays)
Multi-dimensional Arrays are arrays that contain more than one dimension, usually two or three dimensions, but arrays can have up to 32 dimensions.
Declare a 2D Array
To create an array with more than one dimension, use commas to define each separate dimension:
Populating a 2D Array
Your Excel spreadsheet should then be populated as follows.
Populating a 2D Array from Excel data
The code below will populate a 2D array from an Excel worksheet and then populate a different sheet with the data.
Resizing using ReDim and Re-Dim Preserve
You can resize an array using ReDim (learn more).
When you redeclare the array, you will lose any data previously held in the array unless you use the ReDim Preserve Statement.
You can only resize the last dimension of an Array if want to keep the original data in the Array with Re-Dim Preserve.
When you click debug, the error will be highlighted showing that the first dimension in the array is not the same as the first dimension when the array size was originally declared.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
Использование двумерных массивов в VBA на уроках информатики
Рубрика: Информационные технологии
Дата публикации: 10.02.2018 2018-02-10
Статья просмотрена: 4145 раз
Библиографическое описание:
Алексеев, Н. Л. Использование двумерных массивов в VBA на уроках информатики / Н. Л. Алексеев. — Текст : непосредственный // Молодой ученый. — 2018. — № 6 (192). — С. 15-20. — URL: https://moluch.ru/archive/192/48265/ (дата обращения: 20.03.2023).
VBA — универсальный язык программирования. С помощью его можно создавать полноценные приложения на Visual Basic, поскольку эти языки — близкие родственники. Создавать программы на нем можно очень быстро и легко, не нужно заботиться об установке и настройке среды программирования и наличии нужных библиотек на компьютере пользователя — MS Office есть практически на любом компьютере. Рассмотрим пример создания программы с использованием двумерных массивов.
Удобство среды VBA заключается в том, что она внедрена в пакет прикладных программ Microsoft Office и, соответственно, является доступной практически на любом ПК, не требует установки дополнительного программного обеспечения.
Немногие учителя используют в своей работе возможности так называемого офисного программирования. С помощью языка VBA можно создавать различные проекты, которые пригодны к использованию, в том числе на уроках информатики.
Массив — набор однотипных переменных, объединенных одним именем и доступных через это имя и порядковый номер переменной в наборе. Организуем в электронных таблицах Excel двумерный массив А, состоящий из 20 х 10 = 200 элементов. Для этого в Excel создадим поле, в котором определим элементы массива целыми случайными числами от 1 до 100.
Рис. 1. Поле двумерного массива в Excel
Перейдём во вкладку Разработчик → Visual Basic. Затем вкладка Insert → Module. Откроется окно для создания программного кода.
Рис. 2. Окно для создания программного кода
Dim A(20, 10) As Integer
For i = 1 To 20 ‘Число строк в массиве
For j = 1 To 10 ‘Число столбцов в массиве
A(i, j) = Int(Rnd * 100 + 1) ‘Задание массива целыми числами от 1 до 100
При выполнении программы на активном листе Excel образуется следующее поле:
Рис. 3. Заполнение двумерного массива в Excel
Определим переменные для нахождения максимального, минимального, среднего значения в таблице, кроме того, вычислим сумму и размах таблицы. Все перечисленные переменные целые, кроме действительного среднего значения. Присвоим им соответствующие типы данных: Dim Max, Min, Сумма, Размах As Integer, Среднее As Single.
Используя принцип математической индукции, найдём наибольшее и наименьшее значения таблицы: If A(i, j) >Max Then Max = A(i, j)
If A(i, j) = Max Then Max = A(i, j) ‘Вычисление Максимального элемента в массиве
If A(i, j) A(i, j) / 2 And A(i, j) 3 <> A(i, j) / 3 And A(i, j) 5 <> A(i, j) / 25 Then Cells(i, j + 22) = «*»
If A(i, j) 2 = A(i, j) / 2 Then Кратные2 = Кратные2 + 1 ‘Подсчёт количества чисел кратных 2
If A(i, j) 3 = A(i, j) / 3 Then Кратные3 = Кратные3 + 1 ‘Подсчёт количества чисел кратных 3
If A(i, j) 5 = A(i, j) / 5 Then Кратные5 = Кратные5 + 1 ‘Подсчёт количества чисел кратных 5
If Cells(i, j + 22) = «*» Then Звезд = Звезд + 1 ‘Подсчёт количества «*»
Range(«O22″).Value = «Копия Таблицы»
Range(«Z22″).Value = «Обработанная таблица»
Range(«W22″).Value = «Кратные 2″ ‘Вывод результатов
Range(«W23″).Value = «Кратные 3″
Range(«W24″).Value = «Кратные 5″
Рис. 5. Обработанная таблица
Используя офисное программирование можно сформировать у студентов комплекс знаний, умений и навыков, необходимых для решения профессиональных задач в области автоматизации работы с офисным пакетом Microsoft Office.
- И. Г. Фризен. Офисное программирование: Учебное пособие / М. Издательско-торговая корпорация «Дашков и К», 2013 г.
- Языки управления приложениями: Учебно-методическое пособие. — М.: Издательский отдел факультета ВМиК МГУ имени М. В. Ломоносова № 05899; 2015 г.
- https://studfiles.net/preview/2897110/
- https://www.intuit.ru/studies/courses/23/23/info
Похожие статьи
Алгоритм интервального оценивания параметров нелинейных.
m — число параметров функции-модели; n — число точек регрессии; step0, step — начальный и рабочий шаг исходного многогранника (симплекса)
F(1 to m + 4) — массив значений ЦФ или ШФ в вершинах ДМ
Методика проведения лабораторной работы по дисциплине.
поиска максимального элемента в одномерном массиве; 7) пример программы вычисления суммы элементов одномерного массива и количества отрицательных элементов в массиве; особенности работы с двумерными массивами; 9).
Анализ эффективности алгоритмов сортировки и вcтроенных.
Рис. 1. Исходный код сортировки выбором. В таблице 1 приведен расчет времени, необходимый для успешного выполнения сортировки
Учитывая это, сложность алгоритма сортировки вставками определена как O(n^2), где n — количество элементов массива.
Использование алгоритмов нечеткого поиска при решении задачи.
Пусть, например, в качестве аргументов заданы две строки «Привет» и «Превед» и некоторая максимальная длина подстрок, скажем, 4, тогда получаем значения коэффициента, равные 0,75, при n=1; 0,4 при n=2
Сравнительный анализ алгоритмов сортировки данных в массивах.
Размножение объектов массивом в системе моделирования.
По умолчанию максимальное число элементов массива, построенного одной командой, равно 100000.
Если задать большое количество строк и столбцов, построение массива может занять некоторое время.
Сравнительный анализ алгоритмов сортировки данных в массивах
При сортировке подсчетом используется диапазон чисел сортируемого массива для подсчёта совпадающих элементов [2, с. 24]..
Использование алгоритмов нечеткого поиска при решении задачи устранения дубликатов в массивах данных.
Методика формирования информационных файлов для.
— составление графа -«дерево» учебных элементов по теме. — определение понятийных и эмпирических индикаторов.
Размеpы двумеpного массива могут меняться в зависимости от объема pаздела (количество стpок в одной задаче и общее количество задач или вопpосов).
Алгоритмические аспекты доминирования в графах
В дальнейшем эти числа используются для вычисления числа доминирования графа.
Данные структуры инициализируются для работы с заданным деревом в программном виде.
1) структура графа в виде массива окрестностей каждой вершины.
Источник
Заполнение двумерного массива vba excel
Добрый день!
Подскажите, пожалуйста, как реализовать заполнение динамического массива. Приведенный ниже код не работает, ругается на ошибку синтаксиса в выражении massive(, k) = Cells(i, 3).Value(), а как сделать так, чтобы не ругался, тяму не хватает. С одномерным массивом все работает корректно.
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub massiveTest()
Dim i, k As Integer
ReDim massive(0, 0) As String
i = 2
k = 0
Do While Cells(i, 1) <> 0
k = k + 1
ReDim Preserve massive(k, k) As String
massive(k) = Cells(i, 2).Value()
massive(, k) = Cells(i, 3).Value()
i = i + 1
MsgBox massive(k, k)
Loop
Смысл кода: есть таблица о трех колонках. Первая колонка: порядковый номер, вторая — имя, третья — фамилия. Количество строк все время меняется, потому и нужен динамический массив.
Добрый день!
Подскажите, пожалуйста, как реализовать заполнение динамического массива. Приведенный ниже код не работает, ругается на ошибку синтаксиса в выражении massive(, k) = Cells(i, 3).Value(), а как сделать так, чтобы не ругался, тяму не хватает. С одномерным массивом все работает корректно.
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub massiveTest()
Dim i, k As Integer
ReDim massive(0, 0) As String
i = 2
k = 0
Do While Cells(i, 1) <> 0
k = k + 1
ReDim Preserve massive(k, k) As String
massive(k) = Cells(i, 2).Value()
massive(, k) = Cells(i, 3).Value()
i = i + 1
MsgBox massive(k, k)
Loop
Смысл кода: есть таблица о трех колонках. Первая колонка: порядковый номер, вторая — имя, третья — фамилия. Количество строк все время меняется, потому и нужен динамический массив. tsch
Сообщение Добрый день!
Подскажите, пожалуйста, как реализовать заполнение динамического массива. Приведенный ниже код не работает, ругается на ошибку синтаксиса в выражении massive(, k) = Cells(i, 3).Value(), а как сделать так, чтобы не ругался, тяму не хватает. С одномерным массивом все работает корректно.
200?’200px’:»+(this.scrollHeight+5)+’px’);»> Sub massiveTest()
Dim i, k As Integer
ReDim massive(0, 0) As String
i = 2
k = 0
Do While Cells(i, 1) <> 0
k = k + 1
ReDim Preserve massive(k, k) As String
massive(k) = Cells(i, 2).Value()
massive(, k) = Cells(i, 3).Value()
i = i + 1
MsgBox massive(k, k)
Loop
Смысл кода: есть таблица о трех колонках. Первая колонка: порядковый номер, вторая — имя, третья — фамилия. Количество строк все время меняется, потому и нужен динамический массив. Автор — tsch
Дата добавления — 01.02.2017 в 17:45
_Boroda_ | Дата: Среда, 01.02.2017, 17:55 | Сообщение № 2 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
Ответить |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Андрей VG, спасибо за замечания.
Nordheim, вам тоже спасибо. Массив не такой уж большой, 227 значений получилось, выгрузка за полгода. Resize, в итоге, я и хочу использовать.
В общем, задача полностью выглядит так: у меня есть данные по отпускам, и две колонки с датами — одна это дата начала отпуска, вторая это дата конца отпуска. Суть в том, что если месяца не одинаковые (например, я вышел в отпуск в июле, и пришел из отпуска в августе) — то я хочу, чтобы в самом низу создалась еще одна строка с датой конца отпуска.
Звучит просто, если бы я хотел собрать только эти значения, но есть параллельная колонка с персональным номером сотрудников. Я мог бы создать еще один одномерный динамический массив, или же перезаписать существующий, но я сейчас пробую записать сразу обе колонки в один и выгрузить два списка на лист.
Выше текст написал на всякий случай, вдруг кому интересно.
real_x 0 / 0 / 0 Регистрация: 12.10.2010 Сообщений: 5 |
||||
1 |
||||
Заполнение многомерного массива12.10.2010, 07:23. Показов 21135. Ответов 7 Метки нет (Все метки)
Доброго времени суток, Помогите разобраться.
Заранее спасибо
0 |
Заблокирован |
||||||||
12.10.2010, 09:36 |
2 |
|||||||
real_x,
1 |
0 / 0 / 0 Регистрация: 12.10.2010 Сообщений: 5 |
|
12.10.2010, 16:25 [ТС] |
3 |
да это то понятно. я имел ввиду средствами функции Array()
0 |
Заблокирован |
|
12.10.2010, 16:55 |
4 |
real_x, Массив слева (тот, которому присваиваются значения) должен быть динамическим, Цитата с др. сайта: Удобным способом определения одномерных массивов является функция Array
0 |
EducatedFool 0 / 0 / 0 Регистрация: 28.09.2009 Сообщений: 88 |
||||
13.10.2010, 06:41 |
5 |
|||
0 |
real_x 0 / 0 / 0 Регистрация: 12.10.2010 Сообщений: 5 |
||||||||
13.10.2010, 07:21 [ТС] |
6 |
|||||||
Да и так я пробовал…
но вот попробуйте обратиться к одному из элементов этого массива
Busine2009, за чайника обидно…
0 |
Vlanib Частенько бываю 749 / 330 / 42 Регистрация: 20.06.2007 Сообщений: 854 |
||||
13.10.2010, 07:44 |
7 |
|||
2 |
0 / 0 / 0 Регистрация: 12.10.2010 Сообщений: 5 |
|
11.11.2010, 18:54 [ТС] |
8 |
Vlanib и EducatedFool, спасибо!
0 |