Функция поиска в Excel User Defined Function

У меня есть код, который работает хорошо, но невероятно медленно, по причинам, которые станут очевидными.

У меня массив данных около 5000 на 130 строк. В массиве мне нужно найти примеры, когда комбинация сайтов и классов недоступна. Это делается путем циклирования по классам, по сайту и определения того, недоступен ли класс (не равный 2) или если он доступен (равен 2).

Если он недоступен или не найден, класс присваивается строке, а затем перебирается, чтобы найти другие экземпляры. Строка «found» – это результат вывода в ячейку.

Я считаю, что лечение моего недуга использует скриптовый словарь для создания массива и более быстрого цикла. К сожалению, у меня нет опыта в этом.

Может ли кто-нибудь помочь мне с множественным поиском условий и создать скрипт словаря, чтобы пройти через немного быстрее?

Пользователь выбирает до 10 сайтов, 10 классов, а затем дату, которую они ищут, – эта дата имеет около 5000 строк.

Код выглядит следующим образом:

Function TestVlookupNew2(sites, grades, Dates) Application.ScreenUpdating = False LastRow = Sheets("SCNO+").Cells(Rows.Count, "A").End(xlUp).Row Dim z(1 To 50000) Dim dict As Object Dim graderow, siterow As Integer Dim site, grade As Range Dim g, s, tempgrade, tempsite As String ' Set sites = Sheets("Analysis").Range("B3:C3") ' will be user input ' Set grades = Sheets("Analysis").Range("M3:Q3") ' will be user input ' Dates = Sheets("Analysis").Range("X2") ' will be user input SitesTotal = sites.Cells.Count GradesTotal = grades.Cells.Count found = "" tempfound = 0 List = "" For p = 1 To 120 If Sheets("SCNO+").Cells(2, p).Value = Dates Then Exit For Next p For y = 1 To GradesTotal For x = 1 To SitesTotal For i = 3 To LastRow tempgrade = Sheets("Analysis").Cells(grades.Row, y + 12).Value tempsite = Sheets("Analysis").Cells(grades.Row, x + 1).Value g = Sheets("SCNO+").Range("E" & i) s = Sheets("SCNO+").Range("C" & i) On Error Resume Next If Sheets("SCNO+").Range("E" & i) = tempgrade And Sheets("SCNO+").Range("C" & i) = tempsite Then If Not Sheets("SCNO+").Cells(i, p) = 2 Then found = tempgrade End If If Sheets("SCNO+").Cells(i, p) = 2 Then found = "" f = f + 1 End If End If Next i Next x If Not found = "" Then List = found & " " & List End If Next y If tempfound = 0 Then tempfound = tempgrade TestVlookupNew2 = List End Function 

Ура!

Interesting Posts

Получить рабочий лист COMObject в Python

Как получить значение float из excel с помощью openpyxl в python?

«Исключение в потоке» main «java.lang.NoClassDefFoundError: org / apache / commons / collections4 / ListValuedMap» при чтении excel Apache POI selenium

Php скрипт для экспорта продукта Amazon

Как экспортировать все таблицы из базы данных Access в Excel – лист для каждой таблицы

Ошибка Excel VLookup "Object Required"

Как выбрать несколько элементов из поля Pivot Table, используя EPPLUS

Выбор файла выбирает неправильный каталог для экспорта

Условное форматирование на основе предыдущего значения ячейки

Какова функция, используемая для поиска конкретных критериев в одном столбце и ввода второго столбца (рядом с ним)? См. Пример ниже

Сводная таблица с динамическим запросом к внешнему источнику данных

Скопируйте и переместите весь лист в другую книгу. 1 мил строк до 65536 строк

Получить имя пользователя в Excel VBA – не учетная запись, выполняемая в Excel (с использованием RunAs)

определить жирный шрифт с помощью Python xlrd

python vba xlwings: импортировать более одного скрипта python

Давайте будем гением компьютера.