Удалите строку, если значение ячейки на листе такое же, как и значение ячейки на другом листе. - PullRequest
0 голосов
/ 07 августа 2020

Мне нужно удалить строку, если значение столбца G на листе с именем OV равно значению в столбце G на листе с именем all_teams. Я пробую другой подход, однако, когда он работает, удаляет только 1 строку.

Sub test_delete()

    Dim j As Variant
    Dim ltrow As Long

    ltrow = OV.Range("C" & Cells.Rows.Count).End(xlUp).Row
                    
    For j = 2 To ltrow
    
        If all_teams.Range("G" & j).Value = OV.Range("G" & ltrow).Value Then
                    OV.Rows(j).Delete
        End If
                
    Next j
        
End Sub

Каким будет лучший подход для этого?

Ответы [ 3 ]

1 голос
/ 07 августа 2020

Попробуйте:

Option Explicit

Sub test_delete()

    Dim j As Variant
    Dim ltrow As Long
    Dim wsOV As Worksheet, wsAll As Worksheet

    With ThisWorkbook
        Set wsOV = .Worksheets("OV")
        Set wsAll = .Worksheets("all_teams")
    End With
    
    ltrow = wsOV.Range("C" & wsOV.Cells.Rows.Count).End(xlUp).Row
                    
    For j = ltrow To 2 Step -1
    
        If wsAll.Range("G" & j).Value = wsOV.Range("G" & ltrow).Value Then
            wsOV.Rows(j).EntireColumn.Delete
        End If
                
    Next j
        
End Sub
1 голос
/ 07 августа 2020

Попробуйте следующий код, пожалуйста. Пожалуйста, правильно установите используемые листы:

Sub test_delete()
    Dim OV As Worksheet, all_teams As Worksheet, lastROV As Long, lastRAllT As Long
    Dim i As Variant, j As Variant, rngDel As Range
    'you have to set here the sheets...

    lastROV = OV.Range("G" & cells.Rows.count).End(xlUp).Row
    lastRAllT = all_teams.Range("G" & cells.Rows.count).End(xlUp).Row
                    
    For j = 2 To lastROV
        For i = 2 To lastRAllT
            If all_teams.Range("G" & i).Value = OV.Range("G" & j).Value Then
                If rngDel Is Nothing Then
                   Set rngDel = OV.Rows(j)
                Else
                    Set rngDel = Union(rngDel, OV.Rows(j))
                End If
                Exit For
            End If
        Next i
    Next j
    If Not rngDel Is Nothing Then rngDel.EntireRow.Delete xlUp
End Sub
1 голос
/ 07 августа 2020

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

При удалении строк в для l oop лучше всего делать это в обратном порядке, поэтому следующее

For j = ltRow To 2 Step -1

Я считаю, что это может вам помочь!

sub test_delete()

dim j as variant
dim ltrow as long

ltrow = worksheets("OV").Range("C" & Rows.Count).End(xlUp).Row

for j = ltRow to 2 Step -1
   if sheets("all_teams").Range("G" & J).Value = Sheets("OV").Range("G" & ltrow).value then
         Sheets("OV").Rows(J).entirerow.delete
    end if
next
end sub

не проверено, но я думаю, что это может сработать!

...