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

Имею массив данных 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
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39200628
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отключи пересчёт формул. А то он возбуждается на изменение каждой ячейки.
...
Рейтинг: 0 / 0
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39200632
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте отключить автопересчет до макроса, потом вернуть назад

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
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39200686
Takayavot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaОтключи пересчёт формул. А то он возбуждается на изменение каждой ячейки.


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

да нет, 3 столбца, 40 строк
...
Рейтинг: 0 / 0
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39200788
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TakayavotПробовала. Не помогает ((Покажите как пробовали. А то есть подозрение, что пересчет отключаете перед каждой строкой, а не перед всеми действиями. Вот еще почитайте, вдруг что поможет: Как ускорить и оптимизировать код VBA
...
Рейтинг: 0 / 0
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39200808
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если вручную клацнуть протягивание вниз - тоже долго? или выделить диапазон и вбить формулу?
...
Рейтинг: 0 / 0
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39200822
hclubmk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39200823
Фотография essbase.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39200836
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Takayavotдобавить 4 новых столбца, в которых будет прописана формула vlookup следующего видаВ этих 4 столбцах в каждой строке поиск ведется по одной и той же ячейке (ст. А)?
Если да, то можно один раз найти номер строки на Sheet1 с помощью ПОИСКПОЗ, а потом подтягивать строку из 4 ячеек с помощью ИНДЕКС. Если отсортировать ст. А Sheet1 по возрастанию, можно использовать ПОИСКПОЗ с интервальным поиском (последний аргумент 1), при этом поиск происходит во много раз быстрее.
Если конечная цель - получить значения, а не формулы, то надо формировать массив и выгружать на лист одним действием.
Приложите файл-пример.
...
Рейтинг: 0 / 0
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39201810
Takayavot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vladimir Baskakovа если вручную клацнуть протягивание вниз - тоже долго? или выделить диапазон и вбить формулу?

да, так же долго. Именно поэтому в частности пишу макрос.
...
Рейтинг: 0 / 0
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39201812
Takayavot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Ускорить макрос (протягивание формул в Excel (250 тысяч строк)
    #39202018
Vladimir Baskakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TakayavotVladimir Baskakovа если вручную клацнуть протягивание вниз - тоже долго? или выделить диапазон и вбить формулу?

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

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

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

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


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