Всем привет! Подскажите пожалуйста, возникла следующая ситуация: формирую массив, при этом изначально не знаю, сколько в нем будет строк.
Изначально думал задать динамический массив и последовательно его наполнять, но как оказалось - такое невозможно. Думал сделать через Redim Preserve, но там можно менять только последнюю размерность. Транспонировать совсем не хочется...
Как такое можно реализовать и можно ли вообще?
Буду признателен!
Всем привет! Подскажите пожалуйста, возникла следующая ситуация: формирую массив, при этом изначально не знаю, сколько в нем будет строк.
Изначально думал задать динамический массив и последовательно его наполнять, но как оказалось - такое невозможно. Думал сделать через Redim Preserve, но там можно менять только последнюю размерность. Транспонировать совсем не хочется...
Создайте сразу массив на максимальное количество строк. Или собирайте данные в коллекцию/и, затем переложите. Или собирайте в коллекцию "адреса" данных, в конце по адресам собирайте массив.
Создайте сразу массив на максимальное количество строк. Или собирайте данные в коллекцию/и, затем переложите. Или собирайте в коллекцию "адреса" данных, в конце по адресам собирайте массив.Hugo
Такой возможности нет. Есть два варианта: 1) заранее создавайте максимально возможное количество строк 2) если не известно максимально возможное количество строк, то создайте например 100 тысяч строк. Когда все строки будут заполнены добавьте в массив еще 100 тысяч строк. Для этого нужно создать еще один массив. В него запишите имеющиеся данные, затем увеличьте исходный массив и скопируйте в него данные из временного массива. Затем снова заполняйте массив.
Такой возможности нет. Есть два варианта: 1) заранее создавайте максимально возможное количество строк 2) если не известно максимально возможное количество строк, то создайте например 100 тысяч строк. Когда все строки будут заполнены добавьте в массив еще 100 тысяч строк. Для этого нужно создать еще один массив. В него запишите имеющиеся данные, затем увеличьте исходный массив и скопируйте в него данные из временного массива. Затем снова заполняйте массив.Karataev
Думал сделать через Redim Preserve, но там можно менять только последнюю размерность.
Попробуйте заполнять одномерный массив массивов - каждый элемент представляет собой одномерный массив (строка двумерного массива) Индексация такого массива типа arr(1)(3) (в коде будет куча скобочек, симпатично смотрится))
Думал сделать через Redim Preserve, но там можно менять только последнюю размерность.
Попробуйте заполнять одномерный массив массивов - каждый элемент представляет собой одномерный массив (строка двумерного массива) Индексация такого массива типа arr(1)(3) (в коде будет куча скобочек, симпатично смотрится))nilem
Изначально думал задать динамический массив и последовательно его наполнять, но как оказалось - такое невозможно.
А вы все же попробуйте так:
[vba]
Код
Sub massiv() 'зададим массив на 100 элементов Dim massiv() ReDim massiv(1 To 100) 'заполним массив случайными числами от 1 до 10 For i = 1 To 100 massiv(i) = Int((10 * Rnd) + 1) Next i 'объявим наш динамический массив на 1 элемент Dim din_mass() ReDim din_mass(1 To 1) 'зазадим условие наполнения динамического массива For i = 1 To UBound(massiv) If massiv(i) > 5 Then din_mass(UBound(din_mass)) = massiv(i) 'добавляем один элемент к массиву для записи следующего значения ReDim Preserve din_mass(1 To UBound(din_mass) + 1) End If Next i 'убирем последний пустой элемент, т.к. цикл окончен ReDim Preserve din_mass(1 To UBound(din_mass) - 1) End Sub
[/vba] [moder]Оформляйте код тегом #. На первый раз оформил за вас.[/moder]
Изначально думал задать динамический массив и последовательно его наполнять, но как оказалось - такое невозможно.
А вы все же попробуйте так:
[vba]
Код
Sub massiv() 'зададим массив на 100 элементов Dim massiv() ReDim massiv(1 To 100) 'заполним массив случайными числами от 1 до 10 For i = 1 To 100 massiv(i) = Int((10 * Rnd) + 1) Next i 'объявим наш динамический массив на 1 элемент Dim din_mass() ReDim din_mass(1 To 1) 'зазадим условие наполнения динамического массива For i = 1 To UBound(massiv) If massiv(i) > 5 Then din_mass(UBound(din_mass)) = massiv(i) 'добавляем один элемент к массиву для записи следующего значения ReDim Preserve din_mass(1 To UBound(din_mass) + 1) End If Next i 'убирем последний пустой элемент, т.к. цикл окончен ReDim Preserve din_mass(1 To UBound(din_mass) - 1) End Sub
[/vba] [moder]Оформляйте код тегом #. На первый раз оформил за вас.[/moder]fan-vba
Сообщение отредактировал SLAVICK - Среда, 17.01.2018, 10:12