删除以重复值开头的行

Remove rows if they begin with a duplicate value

假设我有一个包含客户发货清单和发货编号的电子表格。例如,DairyQueen 024918。每个货件编号为六位数字。这份发货清单全天都在添加。在一天结束时,我们希望看到每家公司的最新发货。

基本上,我想删除具有重复客户名称但不重复客户发货的行,并且只保留最近的行,即列表底部的行。由于从另一个系统检索数据的特定设置,无法将客户和发货编号放在单独的列中。

这是一个例子:

Costco 002456
DairyQueen 001239
Costco 001335
DairyQueen 008448
Menards 001444
Menards 002448

我想留下这个列表:

Costco 001335
DairyQueen 008448
Menards 002448

目前我试过的代码如下:

Sub DeleteOldClients()
    Dim LastRow As Integer
    LastRow = Range("A1").Cells.SpecialCells(xlCellTypeLastCell).Row
    For i = 1 To LastRow
        For j = 1 To LastRow
            If (Left(Range("A" & i).Value, Len(Range("A" & i).Value) - 7) = Left(Range("A" & j).Value, Len(Range("A" & j).Value) - 7)) Then
                Range("A" & i).EntireRow.Delete
                LastRow = LastRow - 1
            End If
        Next j
    Next i
End Sub

不幸的是,它失败了。有人可以帮忙吗?

您的循环计数器(ij)设置不正确,j 应始终从 i + 1 开始,并且 i 必须在LastRow - 1。您还应该使用 j 删除该行。我还使条件语句更简单一些。如果我的回复适合您,请将问题标记为已回答。

Sub DeleteOldClients()
    Dim LastRow As Integer
    LastRow = Range("A1").Cells.SpecialCells(xlCellTypeLastCell).Row
    For i = 1 To LastRow - 1
        For j = i + 1 To LastRow
            If Range("A" & i).Value = Range("A" & j).Value Or Mid(Range("A" & i).Value, 1, 4) = Mid(Range("A" & j).Value, 1, 4) Then
                Range("A" & j).EntireRow.Delete
                LastRow = LastRow - 1
            End If
        Next j
    Next i
End Sub