1

У меня есть рабочая тетрадь с 2 листами. Лист 1 имеет 3 столбца (1А, 1В и 1С), а лист 2 имеет 2 столбца (2А и 2В). Теперь мне нужно удалить строки из листа 1, если 1A и 1B соответствуют любой строке в листе 2 (т.е. 1A = 2A и 1B = 2B). Поэтому на данный момент в основном забудьте о 1С и удалите все строки на листе 1, которые соответствуют строкам на листе 2.

Одним из способов было бы написать макрос, который берет каждую строку листа 1 и сравнивает 1A со всеми значениями 2A. Если совпадение найдено, сравните соответствующий 1B с 2B и, если они совпадают, удалите строку из листа 1. Учитывая, что каждый лист содержит более 100 000 строк, я думаю, что это сделает количество сравнений слишком большим и займет очень много времени.

Есть ли более эффективный способ сделать это?

1 ответ1

1

Это VBa, отмены нет, поэтому прежде чем сделать это, сначала сделайте резервную копию вашего файла!

Option Explicit

Sub WalkThePlank()
Application.ScreenUpdating = False

Dim startRow As Integer
startRow = 1

Dim row As Integer
row = startRow

Dim bRow As Integer

'sharks below cap'ain
Do While (Worksheets("Sheet1").Range("A" & row).Value <> "")

    Dim aVal As String
    Dim bVal As String

    aVal = Worksheets("Sheet1").Range("A" & row).Value
    bVal = Worksheets("Sheet1").Range("B" & row).Value


    'I see thy booty
    bRow = startRow

    Do While (Worksheets("Sheet2").Range("A" & bRow).Value <> "")

    Dim aVal2 As String
    Dim bVal2 As String

    aVal2 = Worksheets("Sheet2").Range("A" & bRow).Value
    bVal2 = Worksheets("Sheet2").Range("B" & bRow).Value

    If (aVal = aVal2 And bVal = bVal2) Then

        Worksheets("Sheet1").Rows(row).Delete ' we found a traitor, feed em to the sharks
        row = row - row
        Exit Do

    End If

    bRow = bRow + 1

    Loop

row = row + 1
Loop

End Sub

Скриншоты:

Лист1

Sheet2

И после запуска макроса Sheet1 выглядит так (Sheet2 остается неизменным)

Как добавить VBA в MS Office?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .