Поиск заголовков двух столбцов, сравнение и удаление повторяющихся строк только с одного листа.

#excel #vba #duplicates

#excel #vba #дубликаты

Вопрос:

По сути, следующий поиск выполняется в столбце L листа 1, сравнивает его с другим столбцом на отдельном листе (например, Лист 2), а затем удаляет всю строку из листа 1.

У меня возникли проблемы с его применением в других ситуациях.

Можно ли вместо указания столбца «L» легко отредактировать его для поиска заголовка столбца и продолжения той же работы?

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

 Sub F_Check_List()
'Checks first sheet in workbook, column L for Headings matching Sheet2 column C and deletes those that match
    Dim LR As Long, i As Long
With Sheets(1)
    LR = .Range("L" amp; Rows.Count).End(xlUp).Row
    For i = LR To 1 Step -1
    If IsNumeric(Application.Match(.Range("L" amp; i).Value, Sheets(2).Columns("C"), 0)) Then .Rows(i).Delete
Next i
End With
End Sub
  

Очень признателен.

Ответ №1:

Что-то вроде этого должно сработать для вас:

 Sub tgr()

    Dim wb As Workbook
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim rDel As Range
    Dim rHeader1 As Range
    Dim rHeader2 As Range
    Dim rCheck As Range
    Dim sHeader As String

    Set wb = ActiveWorkbook
    Set ws1 = wb.Sheets(1)
    Set ws2 = wb.Sheets(2)
    sHeader = "HeaderB"         'Change this to the header you are searching for

    Set rHeader1 = ws1.Rows(1).Find(sHeader, , xlValues, xlWhole)
    If rHeader1 Is Nothing Then Exit Sub    'Can't find header

    Set rHeader2 = ws2.Rows(1).Find(sHeader, , xlValues, xlWhole)
    If rHeader2 Is Nothing Then Exit Sub    'Can't find header

    For Each rCheck In ws1.Range(rHeader1.Offset(1), ws1.Cells(ws1.Rows.Count, rHeader1.Column).End(xlUp)).Cells
        If WorksheetFunction.CountIf(ws2.Columns(rHeader2.Column), rCheck.Value) > 0 Then
            If rDel Is Nothing Then Set rDel = rCheck Else Set rDel = Union(rDel, rCheck)
        End If
    Next rCheck

    If Not rDel Is Nothing Then rDel.EntireRow.Delete xlShiftUp

End Sub