Excel - Удалить строки, если ячейка в определенном столбце содержит значения, найденные в другом столбце. - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу удалить все строки, если значение в столбце Vendor найдено в другом столбце.(ищите Vendor Col на другом листе)

enter image description here

MainSheet

LookupColumn

VendorCol
google 
microsoft
apple
vendorA
VendorB

Вот что у меня есть, но оно удаляет только одно значение.Как я могу сделать так, чтобы он использовал весь LookupColumn и определял любые строки, в которых значение colc найдено в lookupColumn.Мой простой код VBA обрабатывает одно значение за раз. (Что неэффективно)

Sub Find_Vendor()
    Dim rng As Range
    Dim what As String
    what = "Microsoft"
    Do
        Set rng = ActiveSheet.UsedRange.Find(what)
        If rng Is Nothing Then
            Exit Do
        Else
            Rows(rng.Row).Delete
        End If
    Loop
End Sub

Mainsheet: содержит 600 000 строк. LookupColumn содержит 400 записей.Существующий код очень медленный для объема данных, которые у меня есть.

1 Ответ

0 голосов
/ 25 апреля 2018

использовать автофильтр ():

Option Explicit

Public Sub Find_Vendor()
    Dim filters As Variant
    With Sheets("LookupColumnSheet") ' change "LookupColumnSheet" to your actual sheet with lookup values name
        filters = Application.Transpose(.Range("A1", .Cells(.Rows.Count, 1).End(xlUp)).Value) ' collect "LookupColumnSheet" sheet column A values from row 1 down to last not empty row
    End With

    With Sheets("MainSheet") 'reference "MainSheet" sheet (change "MainSheet" to your actual "MainSheet" sheet name
        With .Range("C1", .Cells(.Rows.Count, 3).End(xlUp)) ' reference referenced sheet column C cells from row 1 down to last not empty one
            .AutoFilter Field:=1, Criteria1:=filters, Operator:=xlFilterValues ' filter referenced range with values from "LookupColumnSheet" sheet column A
            If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete ' if any filtered cells other than header then delete their entire row
        End With
        .AutoFilterMode = False ' remove filters
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...