VBA double для Loop работает очень медленно

Создается следующий макрос, чтобы сопоставить имена сотрудников с номерами значков. Он должен быть превосходным и не иметь доступа. В книге есть два листа. «Все» отслеживает имя, второе имя и другую информацию. В настоящее время эти книги составляют около 8000 строк и растут. «Список EmpCon» (Работодатель / Подрядчик) – это база данных с их именем, именем и номером знака и имеет стабильное количество строк около 450. Существует проверка данных между All и Emp Con, поэтому их имена должны соответствовать совершенно

Макрос предназначен для соответствия первому и второму имени в «Все» от имени в «EmpCon List», а затем сопоставляет его с номером значка, который должен отображаться в «Все».

Макрос представляется логичным, двойным циклом For. Тем не менее, программа не реагирует правильно и «белы» после нескольких секунд работы. Есть ли способ помочь VBA в этом?

Sub BadgeNumberLookUp() Dim i As Integer, j As Integer Application.ScreenUpdating = False Application.DisplayAlerts = False Sheets("All").Select ' Job Number page JobRows = Application.CountA(Range("A:A")) + 10 ' This number is 8000 and growing Sheets("EmpCon List").Select 'Employee / Contractors sheet EmployeeCount = Application.CountA(Range("M:M")) + 10 ' This number is about 450 and stable For i = 1 To JobRows Sheets("All").Select jobPrenom = Cells(i, 1).Value jobSurname = Cells(i, 2).Value For j = 1 To EmployeeCount Sheets("EmpCon List").Select prenom = Cells(j, 13).Value surname = Cells(j, 14).Value indexNo = Cells(j, 12).Value badgeNumber = Cells(j, 15).Value ' Use UCase as sometimes the names are not always in lower/uppercase If UCase(prenom) = UCase(jobPrenom) And UCase(surname) = UCase(jobSurname) Then Sheets("All").Select Cells(i, 16).Value = badgeNumber Exit For End If Next j Next i Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub 

Не решение (AFAIK), но я просто хотел показать вам, как сократить свой код (и любые возможные ловушки с помощью .Select ). Это должно сделать то же самое. Обратите внимание, как я создал две переменные рабочего листа, а затем квалифицировал диапазоны с листом, из которого поступает информация.

 Sub BadgeNumberLookUp_No_Select() Dim i As Integer, j As Integer Dim empConWS As Worksheet, allWS As Worksheet Set empConWS = Sheets("EmpCon List") Set allWS = Sheets("All") Application.ScreenUpdating = False Application.DisplayAlerts = False 'Sheets("All").Select ' Job Number page JobRows = Application.CountA(allWS.Range("A:A")) + 10 ' This number is 8000 and growing 'Sheets("EmpCon List").Select 'Employee / Contractors sheet EmployeeCount = Application.CountA(empConWS.Range("M:M")) + 10 ' This number is about 450 and stable For i = 1 To JobRows 'Sheets("All").Select With allWS jobPrenom = .Cells(i, 1).Value jobSurname = .Cells(i, 2).Value End with For j = 1 To EmployeeCount 'Sheets("EmpCon List").Select With empConWS prenom = .Cells(j, 13).Value surname = .Cells(j, 14).Value indexNo = .Cells(j, 12).Value badgeNumber = .Cells(j, 15).Value End With ' Use UCase as sometimes the names are not always in lower/uppercase If UCase(prenom) = UCase(jobPrenom) And UCase(surname) = UCase(jobSurname) Then 'Sheets("All").Select allWS.Cells(i, 16).Value = badgeNumber Exit For End If Next j Next i Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub 

Запустите это и проверьте, не возникли ли для вас одинаковые ошибки.

Interesting Posts

Использование VLOOKUP () в VBA

Несколько условий с условным форматированием

Отсутствие результата в Azure Machine Learning Web Service

Проблемы с фильтрацией даты в макросе

Выбор всех данных из размера таблицы по умолчанию VBA Excel

Как форматировать валюту в ClosedXML как числовой

Как использовать содержимое ячейки в качестве критерия поиска в таблице Excel

Как конкатенация в Excel с несколькими критериями

Использование таймера для получения заголовка Excel

Перезаписать действие двойного щелчка в сводной таблице, чтобы перейти к отфильтрованным исходным данным

Фильтр с несколькими столбцами

Как перетащить формулу вниз (автозаполнение) с помощью VBA после поиска первой пустой ячейки

Таблица Excel Столбец не содержит времени в столбце «Дата», но все еще показывает время в DataGridView с помощью c #

Ошибка TaskCanceledException при извлечении MemoryStream с помощью книги NPOI

Excel Логическая формула для Total, если существует два типа нулевых значений

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