Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2012, 08:28   #11
andbrother
Пользователь
 
Регистрация: 03.05.2012
Сообщений: 10
По умолчанию

То, что надо. Спасибо.
andbrother вне форума Ответить с цитированием
Старый 08.12.2013, 22:19   #12
RVS35
 
Регистрация: 08.12.2013
Сообщений: 8
По умолчанию

UP-ну темку
Комп - W7 + Excel2010. Макрос обрабатывает на листе 20000 строк по ~600 столбцов за 01 мин 10 сек. Для ускорения работы решил использовать массив и получается какая-то ерунда.

Код:
Sub Bistro()
Dim data_WS As Worksheet
Dim Bistro As Variant
Set data_WS = Application.ThisWorkbook.Worksheets("2")
    Application.Calculation = xlAutomatic
    Sheets("1").Select
    Cells(9, 2) = Time
    begin = Time
    Application.ScreenUpdating = False
    Application.Calculation = xlManual
    ActiveWorkbook.Worksheets("1").Cells(10, 2) = Time - begin
    Bistro = data_WS.Range("B2:WZ20000").Value
    ActiveWorkbook.Worksheets("1").Cells(11, 2) = Time - begin
data_WS.Range("B2:WZ20000").Value = Bistro
    ActiveWorkbook.Worksheets("1").Cells(12, 2) = Time - begin
End Sub
Даже на пустом свежесозданном листе копирование в массив пустых ячеек занимает 3 сек, а обратно на лист - 1 мин 25 сек. Что не так?

Последний раз редактировалось RVS35; 09.12.2013 в 11:20.
RVS35 вне форума Ответить с цитированием
Старый 09.12.2013, 00:00   #13
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Покажите пример такого файла. Думаю там влияет что-то другое.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.12.2013, 11:19   #14
RVS35
 
Регистрация: 08.12.2013
Сообщений: 8
По умолчанию

Попробуйте выполнить вышеуказанный скрипт в новой книге с листами "1" и "2".
Сейчас запустил его на другом компе.
Итог - запись в массив 1 сек, обратно на лист - 45 сек!

Последний раз редактировалось RVS35; 09.12.2013 в 11:24.
RVS35 вне форума Ответить с цитированием
Старый 09.12.2013, 11:31   #15
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Теперь у меня нет такого Экселя, я не проверю...

P.S. Проверил на 255 столбцов - берёт за 2 сек., вываливает за 8.
Соответственно 600 можно сделать где-то за 20.
Попробуйте брать частями - может памяти не хватает, и комп мучает файл подкачки?
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 09.12.2013 в 11:42.
Hugo121 вне форума Ответить с цитированием
Старый 09.12.2013, 11:38   #16
RVS35
 
Регистрация: 08.12.2013
Сообщений: 8
По умолчанию

А чисто теоретически, что может быть? Первый раз решил использовать массив и на тебе....
Запустил на стареньком компе с Excel 2007 результат - 2 сек и 1 мин 22 сек.
RVS35 вне форума Ответить с цитированием
Старый 09.12.2013, 11:42   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Вероятно на 2003 Экселе эта операция выполняется быстрее.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 09.12.2013, 13:22   #18
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Я могу конечно ошибаться, но ИМХО
Цитата:
запись в массив 1 сек, обратно на лист - 45 сек!
ключевые слова здесь выделил
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 09.12.2013, 14:07   #19
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Ну на лист ясно что дольше. Вопрос почему так долго?
Вечером проверю на 2007, если будет время...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 10.12.2013, 01:00   #20
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Это разве долго? Для 12 млн ячеек-то - вполне нормально

У меня так вообще ошибка, - Out of memory
(нехватает памяти для массива, - у меня WinXP, Office 2010, 2GB RAM)

Почему при выводе на лист дольше намного?
Потому что Excel должен применить форматирование к вставленным данным, вычислить формулы (если они есть), и т.д. и т.п., - это не так все быстро происходит.
То ли дело при чтении массива с листа, - только выделить память, и скопировать туда данные.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в Excel даты из набора данных VHomer БД в Delphi 1 06.03.2012 13:44
Delphi + Excel, запись данных в ось Х chart-та funball БД в Delphi 0 11.01.2011 10:16
Запись в массив данных бинарного дерева m9yt Общие вопросы C/C++ 2 14.03.2010 12:49
Запись массива данных из Excel в файл txt Maxx Microsoft Office Excel 5 11.12.2009 14:00
Запись в Excel данных таблицы Word Диагностик Microsoft Office Excel 7 02.04.2009 20:55