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

Вход

Регистрация

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

 

= Мир MS Excel/Ускорить выгрузку данных из массива? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ускорить выгрузку данных из массива? (Макросы/Sub)
Ускорить выгрузку данных из массива?
Glen Дата: Пятница, 27.01.2017, 13:19 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
Доброго дня.
В одной книге есть массив 2100х70
Выгрузка в другую книгу занимает 4,5 сек. Это принципиально много.
Выгружается так:
[vba]
Код
wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
[/vba]
Можно ли ускорить? Может быть есть какие то другие методы, например с помощью библиотек?


Пехаль киндриков куравь, пехаль киндриков лузнись.

Сообщение отредактировал Glen - Пятница, 27.01.2017, 13:30
 
Ответить
СообщениеДоброго дня.
В одной книге есть массив 2100х70
Выгрузка в другую книгу занимает 4,5 сек. Это принципиально много.
Выгружается так:
[vba]
Код
wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
[/vba]
Можно ли ускорить? Может быть есть какие то другие методы, например с помощью библиотек?

Автор - Glen
Дата добавления - 27.01.2017 в 13:19
nilem Дата: Пятница, 27.01.2017, 15:01 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Glen, привет
попробуйте отключить автопересчет формул и запретить события
код нормальный, обычно так и делают


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

Автор - nilem
Дата добавления - 27.01.2017 в 15:01
wild_pig Дата: Пятница, 27.01.2017, 23:16 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 517
Репутация: 97 ±
Замечаний: 0% ±

2003, 2013
А скорость выгрузки была замерена именно на этой строке?
[vba]
Код
t = timer
wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
MsgBox Timer - t
[/vba]
 
Ответить
СообщениеА скорость выгрузки была замерена именно на этой строке?
[vba]
Код
t = timer
wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
MsgBox Timer - t
[/vba]

Автор - wild_pig
Дата добавления - 27.01.2017 в 23:16
Glen Дата: Суббота, 28.01.2017, 16:50 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
Отключено всё что можно. Прямо перед этой строкой.
[vba]
Код
Application.ScreenUpdating = False: Application.EnableEvents = False: Application.DisplayAlerts = False
[/vba]
Замер скорости производился именно так.
[vba]
Код
t = timer: wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData: Debug.Print Timer - t
[/vba]


Пехаль киндриков куравь, пехаль киндриков лузнись.

Сообщение отредактировал Glen - Суббота, 28.01.2017, 16:51
 
Ответить
СообщениеОтключено всё что можно. Прямо перед этой строкой.
[vba]
Код
Application.ScreenUpdating = False: Application.EnableEvents = False: Application.DisplayAlerts = False
[/vba]
Замер скорости производился именно так.
[vba]
Код
t = timer: wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData: Debug.Print Timer - t
[/vba]

Автор - Glen
Дата добавления - 28.01.2017 в 16:50
Hugo Дата: Суббота, 28.01.2017, 20:08 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3253
Репутация: 707 ±
Замечаний: 0% ±

2019
Пересчёт значит не отключали...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеПересчёт значит не отключали...

Автор - Hugo
Дата добавления - 28.01.2017 в 20:08
Glen Дата: Воскресенье, 29.01.2017, 13:55 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
Отключение пересчета Application.Calculation = xlCalculateManual почемуто ни как не влияет на уменьшение времени.
Там нет формул, одни значения.


Пехаль киндриков куравь, пехаль киндриков лузнись.
 
Ответить
СообщениеОтключение пересчета Application.Calculation = xlCalculateManual почемуто ни как не влияет на уменьшение времени.
Там нет формул, одни значения.

Автор - Glen
Дата добавления - 29.01.2017 в 13:55
SLAVICK Дата: Воскресенье, 29.01.2017, 15:05 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
какие данные в массиве?
Попробуйте перед выгрузкой массива изменить высоту строк (к примеру на 13) - помогает если в массиве есть String с переносом строк.
Кстати что за комп?
Был опыт работы с нетбуками - так там выгрузка данных на лист длилась до 10раз дольше чем на компе. Причину так и не выяснил... :( .


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениекакие данные в массиве?
Попробуйте перед выгрузкой массива изменить высоту строк (к примеру на 13) - помогает если в массиве есть String с переносом строк.
Кстати что за комп?
Был опыт работы с нетбуками - так там выгрузка данных на лист длилась до 10раз дольше чем на компе. Причину так и не выяснил... :( .

Автор - SLAVICK
Дата добавления - 29.01.2017 в 15:05
Glen Дата: Воскресенье, 29.01.2017, 16:40 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
SLAVICK,
точно! В массиве полно String с переносом строк. в каждой строке минимум 4 шт, но на листе, с которого копируется, строки одинаковой стандартной ширины - 16 пиксов.
Загрузка в массив vData=[БАЗА]
Завтра попробую каждой строке принудительно присвоить высоту.
Комп обычный: Core i5, проц. свежий, оперативы 8ГБ. Excel 2010.


Пехаль киндриков куравь, пехаль киндриков лузнись.

Сообщение отредактировал Glen - Воскресенье, 29.01.2017, 16:42
 
Ответить
СообщениеSLAVICK,
точно! В массиве полно String с переносом строк. в каждой строке минимум 4 шт, но на листе, с которого копируется, строки одинаковой стандартной ширины - 16 пиксов.
Загрузка в массив vData=[БАЗА]
Завтра попробую каждой строке принудительно присвоить высоту.
Комп обычный: Core i5, проц. свежий, оперативы 8ГБ. Excel 2010.

Автор - Glen
Дата добавления - 29.01.2017 в 16:40
SLAVICK Дата: Воскресенье, 29.01.2017, 18:38 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
строки одинаковой стандартной ширины - 16 пиксов.

ширина и высота исходного листа значения не имеют.
при выгрузке массивов с переносом строк - срабатывает фишка (или глюк) Excel - автоподбор высоты, но если перед этим изменить высоту строк, то автоподбор не запускается.
попробую каждой строке принудительно присвоить высоту.

Зачем аж каждой? Достаточно нужным строкам сразу.
Для этого добавьте строку:
[vba]
Код
wbCSV.Sheets("БАЗА").Range("b2").Resize(UBound(vData)).RowHeight = 13
[/vba]
перед
[vba]
Код
wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
[/vba]


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
строки одинаковой стандартной ширины - 16 пиксов.

ширина и высота исходного листа значения не имеют.
при выгрузке массивов с переносом строк - срабатывает фишка (или глюк) Excel - автоподбор высоты, но если перед этим изменить высоту строк, то автоподбор не запускается.
попробую каждой строке принудительно присвоить высоту.

Зачем аж каждой? Достаточно нужным строкам сразу.
Для этого добавьте строку:
[vba]
Код
wbCSV.Sheets("БАЗА").Range("b2").Resize(UBound(vData)).RowHeight = 13
[/vba]
перед
[vba]
Код
wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
[/vba]

Автор - SLAVICK
Дата добавления - 29.01.2017 в 18:38
Glen Дата: Понедельник, 30.01.2017, 08:58 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 94
Репутация: 10 ±
Замечаний: 0% ±

Excel 2010-16
Произошло чистое "божественное вмешательство"!
Сегодня на компе прошли какие то обновления.
Та вредная строчка, которая выгружалась не быстрее чем 4,5 сек сегодня влетает за 0,6432 сек.
Вот всю пятницу с ней просидел, 5 раз перегружал - ни чего не помогало.
Вопрос снят. Тему можно закрывать.

SLAVICK, спасибо за метод ... .Resize... .RowHeight
Никогда такого не использовал.


Пехаль киндриков куравь, пехаль киндриков лузнись.
 
Ответить
СообщениеПроизошло чистое "божественное вмешательство"!
Сегодня на компе прошли какие то обновления.
Та вредная строчка, которая выгружалась не быстрее чем 4,5 сек сегодня влетает за 0,6432 сек.
Вот всю пятницу с ней просидел, 5 раз перегружал - ни чего не помогало.
Вопрос снят. Тему можно закрывать.

SLAVICK, спасибо за метод ... .Resize... .RowHeight
Никогда такого не использовал.

Автор - Glen
Дата добавления - 30.01.2017 в 08:58
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Ускорить выгрузку данных из массива? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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