Сравните диапазон значений последней строки с набором строк в VBA - PullRequest
0 голосов
/ 25 января 2019

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

DATA1 DATA2 DATA3
cat    1    white
dog    2    white
dog    1    brown
cat    1   white (should be compared and removed from table - similar with 1st row)

Я пытался использовать функцию цикла For.Однако значение диапазона не может принять Range("S" & Lastrow & ":" & "X" & Lastrow).Не могли бы вы посоветовать, какой должен быть правильный формат для этого?Спасибо!

Sub RowCompare()

    Dim ary1() As Variant
    Dim Range1 As Range, Range2 As Range, rr1 As Range, rr2 As Range

    Set xWs = ThisWorkbook.Sheets("Summary")
    LastRow = xWs.Range("T" & Rows.Count).End(xlUp).Row + 1 

    'Check last row with previous rows
    Set Range1 = Range("S5:X" & LastRow)

    For i = LastRow - 1 To 2 Step -1
        Set Range2 = Range("S")
        Set rr1 = Range1.Rows(1)
        Set rr2 = Range2.Rows(1)
        ary1 = Application.Transpose(Application.Transpose(rr1))
        ary2 = Application.Transpose(Application.Transpose(rr2))
        st1 = Join(ary1, ",")
        st2 = Join(ary2, ",")
        If st1 = st2 Then
            MsgBox "UPH already plotted"
            Exit Sub
        End If
    Next

End Sub

1 Ответ

0 голосов
/ 25 января 2019

Например, формула

=COUNTIFS(A:A,A:A,B:B,B:B,C:C,C:C)

приводит к >1, если текущая строка является дубликатом:

enter image description here

Вы также можете использовать это в VBA

Option Explicit

Public Sub TestIfLastRowIsDuplicate()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    Dim LastRow As Long 'find last used row
    LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    Dim Cnt As Long 'count how many duplicates of last row exist
    Cnt = WorksheetFunction.CountIfs(ws.Range("A:A"), ws.Range("A" & LastRow), _
                                     ws.Range("B:B"), ws.Range("B" & LastRow), _
                                     ws.Range("C:C"), ws.Range("C" & LastRow))

    If Cnt > 1 Then
        MsgBox "Last row is duplicate"
    Else
        MsgBox "Last row is unique"
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...