Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ускорить макрос (протягивание формул в Excel (250 тысяч строк) / 15 сообщений из 15, страница 1 из 1
25.03.2016, 13:57
    #39200595
Takayavot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
Доброго дня!

Имею массив данных 250 000 строк.
Который нужно преобразовать, а именно:

добавить 4 новых столбца, в которых будет прописана формула vlookup следующего вида

Код: sql
1.
Range("b2", Cells(Rows.Count, "A").End(xlUp)).Offset(, 1).Formula = "=VLOOKUP(A2;Sheet1!$A:$B;2;0)"



Для каждого такого столбца макрос работает чуть ли не полчаса
Иногда вообще тупо уходит в астрал.

Можно ли как-то ускорить макрос?
Спасибо!
...
Рейтинг: 0 / 0
25.03.2016, 14:17
    #39200628
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
Отключи пересчёт формул. А то он возбуждается на изменение каждой ячейки.
...
Рейтинг: 0 / 0
25.03.2016, 14:19
    #39200632
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
попробуйте отключить автопересчет до макроса, потом вернуть назад

https://msdn.microsoft.com/en-us/library/office/ff821260.aspx


http://www.cpearson.com/excel/optimize.htm

Normally, Excel will recalculate a cell or a range of cells when that cell's or range's precedents have changed. This may cause your workbook to recalculate too often, which will slow down performance. You can prevent Excel from recalculating the workbook by using the statement:

Application.Calculation = xlCalculationManual

At the end of your code, you can set the calculation mode back to automatic with the statement:

Application.Calculation = xlCalculationAutomatic
...
Рейтинг: 0 / 0
25.03.2016, 14:54
    #39200686
Takayavot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
AkinaОтключи пересчёт формул. А то он возбуждается на изменение каждой ячейки.


Пробовала. Не помогает ((
...
Рейтинг: 0 / 0
25.03.2016, 15:18
    #39200736
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
тогда бы я переносил расчет на базу. хотя бы в аксесс. возможно, на запросах то оно быстрее сделает. а большой массив, по которому лукап ищет?
...
Рейтинг: 0 / 0
25.03.2016, 15:20
    #39200738
Takayavot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
Vladimir Baskakovтогда бы я переносил расчет на базу. хотя бы в аксесс. возможно, на запросах то оно быстрее сделает. а большой массив, по которому лукап ищет?

да нет, 3 столбца, 40 строк
...
Рейтинг: 0 / 0
25.03.2016, 16:20
    #39200788
The_Prist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
TakayavotПробовала. Не помогает ((Покажите как пробовали. А то есть подозрение, что пересчет отключаете перед каждой строкой, а не перед всеми действиями. Вот еще почитайте, вдруг что поможет: Как ускорить и оптимизировать код VBA
...
Рейтинг: 0 / 0
25.03.2016, 16:41
    #39200808
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
а если вручную клацнуть протягивание вниз - тоже долго? или выделить диапазон и вбить формулу?
...
Рейтинг: 0 / 0
25.03.2016, 16:56
    #39200822
hclubmk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
Takayavot
Код: sql
1.
Range("b2", Cells(Rows.Count, "A").End(xlUp)).Offset(, 1).Formula = "=VLOOKUP(A2;Sheet1!$A:$B;2;0)"

Странновато или мне кажется? Точно "b2" а не "a2"?
...
Рейтинг: 0 / 0
25.03.2016, 16:57
    #39200823
essbase.ru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
Vladimir Baskakov,
my 2 cents

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
 
 Application.MultiThreadedCalculation.Enabled = True
 Application.AutoRecover.Time = 7
 Application.EnableEvents = True


Sub p_setExcelCalcOff()
    vCurrQueryTime = Timer
    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    ActiveSheet.DisplayPageBreaks = False
    ActiveSheet.UsedRange.EntireRow.Hidden = False
End Sub

Sub p_setExcelCalcOn()
    ActiveSheet.UsedRange.Select
    Selection.NumberFormat = "#,##0.00"
    ActiveSheet.Cells(1, 1).Select
    Application.ScreenUpdating = True
    Application.DisplayStatusBar = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    ActiveSheet.DisplayPageBreaks = True
    ActiveSheet.UsedRange.EntireRow.Hidden = False
    Call p_WriteStatusBarTime
End Sub

Sub p_WriteStatusBarTime()
 vCurrQueryTime = Format(Timer - vCurrQueryTime, "Fixed")
 
Application.StatusBar = "We are done! Exec Time :" & vCurrQueryTime & " sec "
Application.OnTime Now + TimeSerial(0, 0, 90), "p_ClearStatusBar"
End Sub

Sub p_ClearStatusBar()
    Application.StatusBar = False
End Sub
...
Рейтинг: 0 / 0
25.03.2016, 17:07
    #39200836
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
Takayavotдобавить 4 новых столбца, в которых будет прописана формула vlookup следующего видаВ этих 4 столбцах в каждой строке поиск ведется по одной и той же ячейке (ст. А)?
Если да, то можно один раз найти номер строки на Sheet1 с помощью ПОИСКПОЗ, а потом подтягивать строку из 4 ячеек с помощью ИНДЕКС. Если отсортировать ст. А Sheet1 по возрастанию, можно использовать ПОИСКПОЗ с интервальным поиском (последний аргумент 1), при этом поиск происходит во много раз быстрее.
Если конечная цель - получить значения, а не формулы, то надо формировать массив и выгружать на лист одним действием.
Приложите файл-пример.
...
Рейтинг: 0 / 0
28.03.2016, 10:20
    #39201810
Takayavot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
Vladimir Baskakovа если вручную клацнуть протягивание вниз - тоже долго? или выделить диапазон и вбить формулу?

да, так же долго. Именно поэтому в частности пишу макрос.
...
Рейтинг: 0 / 0
28.03.2016, 10:20
    #39201812
Takayavot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
hclubmkTakayavot
Код: sql
1.
Range("b2", Cells(Rows.Count, "A").End(xlUp)).Offset(, 1).Formula = "=VLOOKUP(A2;Sheet1!$A:$B;2;0)"

Странновато или мне кажется? Точно "b2" а не "a2"?

там все верно. Там хитрая формула.
...
Рейтинг: 0 / 0
28.03.2016, 13:13
    #39202018
Vladimir Baskakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
TakayavotVladimir Baskakovа если вручную клацнуть протягивание вниз - тоже долго? или выделить диапазон и вбить формулу?

да, так же долго. Именно поэтому в частности пишу макрос.

когда эксель считает долго, переношу нагрузку на базу. Если там есть хитрые формулы - не глядя на образец не подскажу, как и что оптимизировать. в принципе, совсем любая база довольно быстро соединит 250 килострок данных с 40-50 строками справочника.

даже джаваскриптина думаю справится - если там построить хэш ключ - значения, и построчно читать текстовый файл, выделять ключевое поле, искать в хэше, выводить в итоговый текстовый. приклеивая в хвост найденное по хэшу.
...
Рейтинг: 0 / 0
28.03.2016, 14:27
    #39202122
a_shats
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
Takayavot,

Просто на всякий случай.
Вот с такими много-много-многострочными вещами неплохо работает PowerPivot (есть такой аддон). В смысле - он с ними работает (особенно на предмет всяких массовых операций) сильно шустрее собственно Excel'я.
Правда, там своя собственная логика.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ускорить макрос (протягивание формул в Excel (250 тысяч строк) / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]