Я использовал приведенную ниже формулу excel.Оптимизируйте формулу Excel, которая использует большие массивы
=INDEX(TABL,SMALL(IF(COUNTIF(H2,$A$1:$A$325779)*COUNTIF(I2,"<="&$B$1:$B$325779),ROW(TABL)-MIN(ROW(TABL))+1),1),3)
Где "TABL", таблица, является A1: E325779 и является источником моего поиска массива.
Указанная формула является точным требованием, но занимает много времени, чтобы обновить excel для 400 000+ клеток, содержащих эту формулу.
Можно ли это оптимизировать? Или это можно приравнять к более быстрому макросу?
Принимает 1 секунду, чтобы обновить 1 ячейку !!! Это очень долгое время, чтобы обновить все ячейки 400K +!
Снимок экрана рабочего листа, как показано ниже.
Я основывал свою программу на Мартин Карлссона. обрабатывает 100 записей за 30 секунд. можно ли улучшить?
Sub subFindValue()
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Cells(2, 12) = Format(DateTime.Now, "yyyy-MM-dd hh:mm:ss")
Dim varRow As Variant
Dim varRowMain As Variant
Dim lookupTable As Variant
Dim lookupValueTable As Variant
lookupValueTable = Range("G2:J309011").Value
lookupTable = Range("A2:D325779").Value
varRowMain = 1
varRow = 1
Do Until varRowMain = 309011
Do Until varRow = 325779
If lookupTable(varRow, 1) = lookupValueTable(varRowMain, 1) And lookupTable(varRow, 2) >= lookupValueTable(varRowMain, 2) Then
lookupValueTable(varRowMain, 3) = lookupTable(varRow, 3)
lookupValueTable(varRowMain, 4) = lookupTable(varRow, 4)
Exit Do
End If
varRow = varRow + 1
Loop
If IsEmpty(lookupValueTable(varRowMain, 3)) Then
lookupValueTable(varRowMain, 3) = "NA_OX"
lookupValueTable(varRowMain, 4) = "NA_OY"
End If
varRowMain = varRowMain + 1
varRow = 1
Loop
Range("G2:J309011").Value = lookupValueTable
Cells(3, 12) = Format(DateTime.Now, "yyyy-MM-dd hh:mm:ss")
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
Вычислить формулу затем придерживаться в результате в камере? Вы об этом подумали? –
Копирование Вставка как значение появляется после вычисления формул. проблема заключается в вычислении формулы для каждой ячейки займет более 48 часов в любом сценарии (каждая ячейка занимает не менее 1 секунды для обновления). Таким образом, поиск идей для ускорения обработки данных. Как и в изображении, вставленном выше, есть только одна тестовая информация (Gold, 2.5), в действительности существует 400 000 + таких записей для поиска из 300 000 записей в таблице поиска. –
рассмотрите решение VBA вместо функции массива или любую встроенную функцию. Они работают по-разному в разных потоках, и я заверяю вас, что VBA намного быстрее –