VBA использует Index / Match для поиска и замены определенных значений в целевой таблице - PullRequest
1 голос
/ 23 октября 2019

Обновление информации на уже заполненном целевом листе, который содержит определенную числовую строку в исходном листе. Использование INDEX / MATCH

Я успешно сделал это с помощью Excel-VLOOKUP в Vba, но мне нужно использовать INDEX / MATCH, потому что текущий код слишком медленный.

Я сейчас использую этот метод, ноэто слишком медленно.

[Sub quick_reviewercomments () Dim lngRow As Long

On Error Resume Next
lngRow = Application.WorksheetFunction.Match(Worksheets("REVIEW SHEET").Range("C2"), Worksheets("SAVEDWORK").Range("b2:b15000"), 0)
If Err.Number <> 0 Then
    MsgBox "Search failed "
    Exit Sub
End If
On Error GoTo 0
Worksheets("SavedWork").Range("b2:b15000").Cells(lngRow, 18) = Sheets("Review Sheet").Range("d18")

End Sub]

На целевом листе (Sheet2) есть старая информацияи мне нужно заменить некоторые данные обновленной информацией, которую я буду вводить на листе 1, используя номер заявки в качестве совпадения.

Например, если старая информация заявки № 123 на листе 2 "ОТКРЫТА" подСтолбец статуса, я хочу ввести номер заявки на листе 1, ввести «ЗАКРЫТО» и изменить это значение на листе 2, чтобы отразить новый статус, который я только что ему присвоил.

На листе 2 более 10000 строк. , поэтому часть кода, который я пытался использовать с помощью VBA и Vlookup, занимает более 1 минуты для обновления каждой записи.

Я надеюсь, что с INDEX MATCH можно сделать что-то подобное, чтобы увидеть, быстрее ли это.

Редактировать # 2: Хорошо, я объединил все поиски в 1. Теперь это выглядит так. Я рассчитал это, и это занимает 37-38 секунд, чтобы завершить (что все еще может быть неприемлемо для босса). на самом деле заполнено только 3500 строк Excel, но в коде он равен 10K, чтобы дать ему место для расширения.

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

Sub UPDATE_RECORD () Dim lngRow As Long В случае ошибки Возобновить Далее lngRow = Application.WorksheetFunction.Match (Worksheets ("REVIEW SHEET"). Range ("C2"), Worksheets ("SAVEDWORK"). Range ("b2: b10000"), 0) Если Err.Number <> 0, то MsgBox "Не удалось выполнить поиск" Выход из вспомогательного конца при ошибке Перейти к 0 Рабочие листы ("SavedWork").Range ("b2: b10000"). Ячейки (lngRow, 18) = Листы ("Лист обзора"). Диапазон ("D18") Рабочие листы ("SavedWork"). Диапазон ("b2: b10000"). Ячейки (lngRow, 19) = Листы ("Лист обзора"). Диапазон ("D19") Рабочие листы ("SavedWork"). Диапазон ("b2: b10000"). Ячейки (lngRow, 20) = Листы ("Лист обзора"). Диапазон("D20") Рабочие листы ("SavedWork"). Диапазон ("b2: b10000"). Ячейки (lngRow, 23) = Листы ("Обзорный лист"). Диапазон ("F22") Рабочие листы ("SavedWork"). Диапазон("b2: b10000"). Ячейки (lngRow, 22) = Листы ("Обзорный лист"). Диапазон ("D22") Рабочие листы ("SavedWork"). Диапазон ("b2: b10000"). Ячейки (lngRow, 16)= Листы ("Лист обзора"). Диапазон ("D2") Конец Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...