删除相似的行

时间:2014-05-03 08:50:38

标签: regex excel excel-vba notepad++ vba

我有300个行的3个单词短语列表。如果任何其他行包含2个相同的单词,我需要删除每一行。例如

Word1 word2 word3
word1 word2 word4 - delete
word1 word2 word5 - delete
word1 word6 word7 - keep, only 1 matching words compared to earlier rows

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

第1步。使用文字到列或公式将单词分成三列(A,B和C)

第2步。在D,E和F列中,通过以下公式创建所有双字组合:

=A1&B1
=B1&C1
=A1&C1

第3步。将以下公式放入G1并通过H和I列以及所有行填充:

=SUM(COUNTIF(OFFSET($D$1,0,0,ROW(D1),1),D1),COUNTIF(OFFSET($E$1,0,0,ROW(E1),1),D1),COUNTIF(OFFSET($F$1,0,0,ROW(F1),1),D1))-COUNTIF($D1:$F1,D1)

电子表格现在应该看起来像这个截图(除了我添加到最后的两行): enter image description here

所有包含两个与上一行中两个单词匹配的单词的行在G,H或I列中的值都大于0.

第4步。最后,按行G,H和I等于0过滤整个表格。如果需要,可以将字词复制并过去(按值)到另一张表格。

答案 1 :(得分:1)

这三个单词短语是在单独的单元格中还是都在同一个单元格中。

如果它们位于不同的单元格中,您可以使用此宏:

Option Explicit
Sub DeleteDups()
    Dim colPhrase As Collection
    Dim colRows As Collection
    Dim V As Variant, vRes() As Variant
    Dim I As Long, J As Long
    Dim lDupCount As Long

    Dim rRes As Range 'results range

V = Worksheets("sheet1").Range("a1", Cells(Rows.Count, "C").End(xlUp))
Set colPhrase = New Collection
Set colRows = New Collection

Set rRes = Range("e1")

'look for dups
For I = 1 To UBound(V)
    lDupCount = 0
    On Error Resume Next
    For J = 1 To 3
        colPhrase.Add Item:=CStr(V(I, J)), Key:=CStr(V(I, J))
        If Err.Number <> 0 Then lDupCount = lDupCount + 1
        Err.Clear
    Next J
    On Error GoTo 0
    If lDupCount < 2 Then colRows.Add Item:=CStr(I)
Next I

ReDim vRes(1 To colRows.Count, 1 To 3)
For I = 1 To colRows.Count
    For J = 1 To 3
        vRes(I, J) = V(colRows(I), J)
    Next J
Next I

Set rRes = rRes.Resize(UBound(vRes), 3)
rRes.EntireColumn.Clear
rRes = vRes

End Sub

如果它们在同一个单元格中,根据短语的分隔方式,您只需要添加一行将它们分成三个数组元素。