Доброго времени суток! Подскажите быстрый способ копирования диапазона в массив. Я всегда использовала: Dim ar As Variant ar = Range(Cells(1,1), Cells(1000, 10)) Но сегодня столкнулась с проблемой, большой диапазон (строк 560к, столбцов 90к) нельзя скопировать таким образок, выдает ошибку - приложила. При ограничении размера массива, всё работает хорошо... Заранее спасибо
vikttur, я уже тоже думала.. Но из-за того, что мне нужно обрабатывать весь массив по определенным условиям и выводить только "отсортированные" данные, я передумала.
Юрий М, может при копировании как-то скопировать только те столбцы которые участвуют в расчете. Что-то типа:
Код
ar = Range(Cells(1, 1), Cells(1, ILastColOrg)).Value 'копируем шапку с названием строк
'находим первый нужный столбец
For i to ILastColOrg
if ar(1,i)="Название нужного столбца"
n1=i 'запомнили номер
End IF
Next
For i to ILastColOrg
if ar(1,i)="Название нужного столбца2"
n21=i 'запомнили номер
End IF
Next
'и потом раз 15 скопировать нужные данные
ar = Range(Cells(1, 1), Cells(n1, ILastColOrg)).Value
ar = Range(Cells(1, 1), Cells(n2, ILastColOrg)).Value
Больше в голову ничего не приходит.. Будет страшненько, но без ошибок
kate14, 556000 строк X 90 столбцов = 50'040'000 элементов типа Variant = 800'640'000 байт. Если в ячейках текстовые значения (строки), то еще добавляются сами строки. Сколько доступной оперативной памяти на машине до запуска макроса показывает диспетчер задач? Какие данные в ячейках? Если, например, там целые числа, и при работе не появится дробных, то можно объявить массив
Код
Dim arr(1 To 556000, 1 To 90) As Long
и заполнить его по частям. Он займет в 4 раза меньше памяти, и вычисления будут существенно быстрее.
Кстати сталкивался с таким - в ячейке с форматом даты было забито что-то непотребное (что именно не помню, но не дата) - в итоге массив не создавался, но какая именно была ошибка сейчас не помню.
Игорь, ошибка совместимости типов должна была быть. Недавно в очередной раз столкнулся с той же проблемой. При этом, т.к. был не один массив - прям такой ошибки не было, однако выползали иные ошибки(например невозможно было на каком-то этапе создать новый объект словаря), но причина была именно в нехватке памяти. Пришлось для верности разбить на части по 2000 строк и 20 столбцов(там предел был 20 столбцов). Цикл был с шагом в 2000 и каждый раз потом обрабатывался массив в памяти из 2000х20 элементов. Т.к. задача была создать массив уникальных - это имело смысл, т.к. в результате получался куда меньший массив данных. Еще одна фишка: в 2007 Excel массив может быть создан в памяти, но не выгрузится полностью на лист. В 2010 такого не встречал, а вот 2007 подколол.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...