Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Последовательное наполнение массива - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Последовательное наполнение массива
akobir Дата: Понедельник, 15.01.2018, 18:10 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
Всем привет!
Подскажите пожалуйста, возникла следующая ситуация: формирую массив, при этом изначально не знаю, сколько в нем будет строк.

Изначально думал задать динамический массив и последовательно его наполнять, но как оказалось - такое невозможно.
Думал сделать через Redim Preserve, но там можно менять только последнюю размерность.
Транспонировать совсем не хочется...

Как такое можно реализовать и можно ли вообще?

Буду признателен!


e-mail: akobir.ismailov@gmail.com
 
Ответить
СообщениеВсем привет!
Подскажите пожалуйста, возникла следующая ситуация: формирую массив, при этом изначально не знаю, сколько в нем будет строк.

Изначально думал задать динамический массив и последовательно его наполнять, но как оказалось - такое невозможно.
Думал сделать через Redim Preserve, но там можно менять только последнюю размерность.
Транспонировать совсем не хочется...

Как такое можно реализовать и можно ли вообще?

Буду признателен!

Автор - akobir
Дата добавления - 15.01.2018 в 18:10
Hugo Дата: Понедельник, 15.01.2018, 18:23 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3859
Репутация: 819 ±
Замечаний: 0% ±

365
Создайте сразу массив на максимальное количество строк.
Или собирайте данные в коллекцию/и, затем переложите.
Или собирайте в коллекцию "адреса" данных, в конце по адресам собирайте массив.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеСоздайте сразу массив на максимальное количество строк.
Или собирайте данные в коллекцию/и, затем переложите.
Или собирайте в коллекцию "адреса" данных, в конце по адресам собирайте массив.

Автор - Hugo
Дата добавления - 15.01.2018 в 18:23
Karataev Дата: Понедельник, 15.01.2018, 18:24 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 1342
Репутация: 535 ±
Замечаний: 0% ±

Excel
Такой возможности нет. Есть два варианта:
1) заранее создавайте максимально возможное количество строк
2) если не известно максимально возможное количество строк, то создайте например 100 тысяч строк. Когда все строки будут заполнены добавьте в массив еще 100 тысяч строк. Для этого нужно создать еще один массив. В него запишите имеющиеся данные, затем увеличьте исходный массив и скопируйте в него данные из временного массива. Затем снова заполняйте массив.
 
Ответить
СообщениеТакой возможности нет. Есть два варианта:
1) заранее создавайте максимально возможное количество строк
2) если не известно максимально возможное количество строк, то создайте например 100 тысяч строк. Когда все строки будут заполнены добавьте в массив еще 100 тысяч строк. Для этого нужно создать еще один массив. В него запишите имеющиеся данные, затем увеличьте исходный массив и скопируйте в него данные из временного массива. Затем снова заполняйте массив.

Автор - Karataev
Дата добавления - 15.01.2018 в 18:24
akobir Дата: Понедельник, 15.01.2018, 18:37 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
Hugo, Karataev,
Так и сделал, но решение совсем некрасивое. :(
С коллекциями не работал - пора начинать.
Спасибо!


e-mail: akobir.ismailov@gmail.com
 
Ответить
СообщениеHugo, Karataev,
Так и сделал, но решение совсем некрасивое. :(
С коллекциями не работал - пора начинать.
Спасибо!

Автор - akobir
Дата добавления - 15.01.2018 в 18:37
nilem Дата: Понедельник, 15.01.2018, 18:58 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Думал сделать через Redim Preserve, но там можно менять только последнюю размерность.

Попробуйте заполнять одномерный массив массивов - каждый элемент представляет собой одномерный массив (строка двумерного массива)
Индексация такого массива типа arr(1)(3) (в коде будет куча скобочек, симпатично смотрится))


Яндекс.Деньги 4100159601573
 
Ответить
Сообщение
Думал сделать через Redim Preserve, но там можно менять только последнюю размерность.

Попробуйте заполнять одномерный массив массивов - каждый элемент представляет собой одномерный массив (строка двумерного массива)
Индексация такого массива типа arr(1)(3) (в коде будет куча скобочек, симпатично смотрится))

Автор - nilem
Дата добавления - 15.01.2018 в 18:58
fan-vba Дата: Среда, 17.01.2018, 09:27 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 10 ±
Замечаний: 0% ±

Excel 2007
Изначально думал задать динамический массив и последовательно его наполнять, но как оказалось - такое невозможно.

А вы все же попробуйте так:

[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]


Сообщение отредактировал SLAVICK - Среда, 17.01.2018, 10:12
 
Ответить
Сообщение
Изначально думал задать динамический массив и последовательно его наполнять, но как оказалось - такое невозможно.

А вы все же попробуйте так:

[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
Дата добавления - 17.01.2018 в 09:27
fan-vba Дата: Среда, 17.01.2018, 10:27 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 24
Репутация: 10 ±
Замечаний: 0% ±

Excel 2007
извините, я коды умею, а на форуме не очень)
 
Ответить
Сообщениеизвините, я коды умею, а на форуме не очень)

Автор - fan-vba
Дата добавления - 17.01.2018 в 10:27
akobir Дата: Суббота, 27.01.2018, 11:53 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
fan-vba, Спасибо! Использую теперь в своих кодах.


e-mail: akobir.ismailov@gmail.com
 
Ответить
Сообщениеfan-vba, Спасибо! Использую теперь в своих кодах.

Автор - akobir
Дата добавления - 27.01.2018 в 11:53
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!