Страницы: 1
RSS
Проблема с запихиванием данных в массив
 
Добрый день, форумчане.
Столкнулся с такой проблемой. Есть файл с данными более 300к+ строк и порядка 40 столбцов. Хочу данные запихнуть макросом в массив, но почему-то полностью не получается запихнуть сразу.
при каждом прогоне макроса постоянно разный результат, то 4000 строк будет, то 69к, то 200к.
Может кто подскажет как запихнуть ? В чем проблема может?
Пробовал и .Range("A1:AN" & номер последней строки)
Код
sub процедура ()

переменнаяКниги = GetObject(pathBook)
массив = переменнаяКниги.ActiveSheet.UsedRange
переменнаяКниги.Close

....
End sub
 
читайте документацию там написано о максимальных размерах массива, о максимальном обьеме данных, который может содержать массив
(память не безразмерна, ограничения есть, нужно их учитывать)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Не пытайтесь запихивать. в бутылку 0,75 никак литруха не поместится )
 
не подскажете , как тогда можно обойти стороной пробег по файлу ? Массив просто быстрее обрабатывается.
 
Пробовали не через метод GetObject?
"Все гениальное просто, а все простое гениально!!!"
 
Забирайте в массив только нужный диапазон.
 
Просто в данном файле необходимые столбцы находятся на больших расстояниях . 2 столбец, 24, столбец, 36 столбец.
Хотя вы правы, можно попробовать скопировать на новый лист нужные столбцы и потом забрать их в массив.
Будем пробовать.

Цитата
Nordheim написал: Пробовали не через метод GetObject?
Да, через WorkBook.open  и  массив = Книга .Активный лист и т.д.
 
По какому столбцу определяете последнюю строку из 40? увидеть бы оригинальный файл, впервые о таком слышу, что бы одни и те же данные на листезабирались в разные по размерам массивы
"Все гениальное просто, а все простое гениально!!!"
 
послСтрока = Книга.Лист.UsedRange.Rows.Count
 
Цитата
nor написал: ...копировать на новый лист нужные столбцы и потом забрать их в массив.
Зачем? збирайте в несколько разных массивов и обрабатывайте раздельно.

off
Цитата
vikttur написал:  0,75 никак литруха не поместится
просто нужно использовать концентрат, тогда еще и место останется :-) , даже с учетом уменьшения объема при смешивании за счет более плотной упаковки  молекул :-)
По вопросам из тем форума, личку не читаю.
 
Это к химику с колбочкой )
 
Цитата
nor написал:
послСтрока = Книга.Лист.UsedRange.Rows.Count
А если так
Код
 Книга.Лист.Range("a" & Книга.Лист.Rows.Count).end(xlUp).row
так же не работает?
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
nor написал:
при каждом прогоне макроса постоянно разный результат, то 4000 строк будет, то 69к, то 200к.
Проблема в максимальном объеме памяти на вашем компьютере и в системе (32-бит/64-бит).
Например, для 2 GB RAM (win 32-бит, office 32-бит) вы можете создать массив из 831590 строк x 40 столбцов (например у меня, но на разных компьютерах будет по-разному).
Если в памяти запущены другие процессы (в фоновом режиме) или память не была освобождена после других действий, у вас соответственно меньше места для таблицы в vba.

Цитата
nor написал:
Может кто подскажет как запихнуть ?
Это зависит от того, что вы фактически хотите делать с этими данными.
Вам может потребоваться использовать sql в vba или например PQ, или разделить данные на блоки и выполнить действия с отдельными блоками данных.
Кто знает, какие действия вы там выполняете над этими данными ?
 
ocet p, спасибо за информацию. Про sql тоже задумался. Спасибо всем за помощь.  
Страницы: 1
Наверх