我有以下两列数据:
Location Value
A 1
A 1
B 2
C 2
D 3
D 3
E 4
E 4
F 5
G 5
如果有重复的Location
和组合Value
,则必须将其删除。如果我使用删除重复选项,则会删除重复项,但会保留其中一个重复值,这对我来说不利。我预期的输出是:
Location Value
B 2
C 2
F 5
G 5
以下是我迄今为止想到的和尝试过的:
我将两列连接起来,然后用来COUNTIF
计算某个值重复的次数。然后,我可以通过仅考虑等于 1 的计数来过滤计数列。如下所示:
但是,由于我的电子表格中已经进行了各种其他过滤和排序,因此我的这种方法不可行。
还有其他建议可以达到与我相同的结果吗?
答案1
使用 VBA:
Public Function allDuplicates()
Dim a As Application
Set a = Application
Dim arrayRows() As Boolean
maxCol = 2
firstRow = 2
Dim wks As Worksheet
Set wks = ActiveSheet
wks.Application.ScreenUpdating = False
totalRows = wks.Cells(Rows.Count, "A").End(xlUp).Row
ReDim arrayRows(totalRows)
For i = firstRow To totalRows
theRow = Join(a.Transpose(a.Transpose(wks.Range(Cells(i, 1), Cells(i, maxCol)))), Chr(0))
For j = i + 1 To totalRows
theOtherRow = Join(a.Transpose(a.Transpose(wks.Range(Cells(j, 1), Cells(j, maxCol)))), Chr(0))
If theRow = theOtherRow Then
arrayRows(i) = True
arrayRows(j) = True
End If
Next j
Next i
For i = firstRow To totalRows
If arrayRows(i) = True Then
wks.Rows(i).Clear
End If
Next i
Range("A1:B" & totalRows).Sort key1:=Range("A2:A" & totalRows), order1:=xlAscending, Header:=xlYes
wks.Application.ScreenUpdating = True
Message = MsgBox("Finished", vbInformation)
End Function
打开 Visual Basic /Macros,在下方添加一个模块本工作簿,将代码粘贴到右侧,并执行。