Ускорить выгрузку данных из массива?
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] Можно ли ускорить? Может быть есть какие то другие методы, например с помощью библиотек?
Доброго дня. В одной книге есть массив 2100х70 Выгрузка в другую книгу занимает 4,5 сек. Это принципиально много. Выгружается так: [vba]Код
wbCSV.Sheets("БАЗА").Range("B2").Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
[/vba] Можно ли ускорить? Может быть есть какие то другие методы, например с помощью библиотек? Glen
Пехаль киндриков куравь, пехаль киндриков лузнись.
Сообщение отредактировал 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 , привет попробуйте отключить автопересчет формул и запретить события код нормальный, обычно так и делают
Glen , привет попробуйте отключить автопересчет формул и запретить события код нормальный, обычно так и делаютnilem
Яндекс.Деньги 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
Ответить
Сообщение А скорость выгрузки была замерена именно на этой строке? [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]
Отключено всё что можно. Прямо перед этой строкой. [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
Пехаль киндриков куравь, пехаль киндриков лузнись.
Сообщение отредактировал 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
Пересчёт значит не отключали...
Пересчёт значит не отключали... Hugo
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
Пехаль киндриков куравь, пехаль киндриков лузнись.
Ответить
Сообщение Отключение пересчета 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
Иногда все проще чем кажется с первого взгляда.
Ответить
Сообщение какие данные в массиве? Попробуйте перед выгрузкой массива изменить высоту строк (к примеру на 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.
SLAVICK, точно! В массиве полно String с переносом строк. в каждой строке минимум 4 шт, но на листе, с которого копируется, строки одинаковой стандартной ширины - 16 пиксов. Загрузка в массив vData=[БАЗА] Завтра попробую каждой строке принудительно присвоить высоту. Комп обычный: Core i5, проц. свежий, оперативы 8ГБ. Excel 2010. Glen
Пехаль киндриков куравь, пехаль киндриков лузнись.
Сообщение отредактировал 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
Иногда все проще чем кажется с первого взгляда.
Ответить
Сообщение строки одинаковой стандартной ширины - 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
Пехаль киндриков куравь, пехаль киндриков лузнись.
Ответить
Сообщение Произошло чистое "божественное вмешательство"! Сегодня на компе прошли какие то обновления. Та вредная строчка, которая выгружалась не быстрее чем 4,5 сек сегодня влетает за 0,6432 сек. Вот всю пятницу с ней просидел, 5 раз перегружал - ни чего не помогало. Вопрос снят. Тему можно закрывать. SLAVICK , спасибо за метод ... .Resize... .RowHeight Никогда такого не использовал. Автор - Glen Дата добавления - 30.01.2017 в 08:58