有找到重复单词的方法吗?

时间:2013-08-10 18:04:40

标签: vba excel-vba excel-formula worksheet-function excel

所以我试图找到/制作一个能在excel中找到我所有重复单词的程序。例如,在A1“人”中的A1“某人”等等,但我会有“某人”倍数或其他单词,我需要将这些信息压缩在一起。但我需要以我不喜欢的方式做到这一点。 t手动搜索以连接重复项。那么有没有办法找到重复的单词并将它们连接起来?

我也一直在寻找使用“FIND”来寻找它们,但它已经没有运气了。我也一直在使用“过滤器”,但我不知道如何在不手动操作的情况下压缩重复项。我也想知道在哪里可以找到“FIND,REPLACE等”等功能的代码?如果我能找到我可以改变“删除重复”的编码来改变它的话。但是,嘿,我真的不知道这是否真的有效。任何事都会有所帮助。

例如:

culomn1 - culomn2 -----culomn3
y ------ A -----(nothing) 
z ------ B -----(nothing) 
z ------ (nothing)-----I
x ------ (nothing)-----k
y ------ (nothing)-----j 
x ------ C ------(nothing)

到这个

culomn1 - culomn2 -----culomn3
y------A------j
z------B------I
x------C------k

除了字母是单词。 enter image description here

4 个答案:

答案 0 :(得分:1)

我不知道你是否可以用Excel中的公式来做这件事,除非你知道你在单元格中寻找什么词。您可以尝试使用UDF或正则表达式。

我的问题和回答链接可能会让你开始:

StackOverflow: formula to see if a surname is repeated within a cell

并且可能:

VBA Express

一旦您发布了包含数据的Excel工作表,我们就会看到我是否错了!

答案 1 :(得分:1)

您可以使用高级过滤器将第1列中的唯一值复制到新列。然后你将使用vlookup公式来完成剩下的工作。

假设:

  • 第1行是标题行,因此实际数据从第2行开始
  • Column1是“A”列
  • Column2是列“B”
  • Column3是列“C”
  • 具有唯一值的新列是“E”列。

在单元格F2中复制到G2然后根据需要向下复制:

=INDEX(INDEX($B$2:$C$7,0,COLUMNS($E2:E2)),MATCH(1,INDEX(($A$2:$A$7=$E2)*(INDEX($B$2:$C$7,0,COLUMNS($E2:E2))<>""),),0))

答案 2 :(得分:1)

Sheet1之前: enter image description here

代码:

Sub Macro1()

    With Sheet1
        .Columns("A:A").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.Range("F1:F2"), CopyToRange:=.Range("K1"), Unique:=True
        .Columns("B:B").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.Range("G1:G2"), CopyToRange:=.Range("L1"), Unique:=True
        .Columns("C:C").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.Range("H1:H2"), CopyToRange:=.Range("M1"), Unique:=True
    End With

End Sub

Sheet1 After: enter image description here

确保使用字段名称。

答案 3 :(得分:1)

这将为您提供一个功能,可以找到针对特定字符串的第一个非空白单元格

Option Explicit

Function NonBlankLookup(SearchTxt As String, LookIn As Range, OffSetRows As Long) As Variant
Dim loc As Range
Dim FirstFound As Range

Set loc = LookIn.Find(what:=SearchTxt)
While Not (loc Is Nothing)
    If Not IsEmpty(loc.Offset(0, OffSetRows)) Then
        NonBlankLookup = loc.Offset(0, OffSetRows).Value
        Exit Function
    End If
    If FirstFound Is Nothing Then
        Set FirstFound = loc
    ElseIf loc = FirstFound Then
        NonBlankLookup = CVErr(2000)
        Exit Function
    End If
    Set loc = LookIn.Find(what:=SearchTxt, after:=loc)
Wend
NonBlankLookup = CVErr(2000)
End Function

使用,将此代码插入到模块中,然后在excel电子表格中,您可以使用=NonBlankLookup(E1,$A$1:$A$6,1)这样的公式来搜索 A1:A6 中的文字,并检查右侧1列。如果找不到与搜索字符串匹配的文本,或者找到了文本但指定列中没有数据,则返回 #NULL!
这对vlookup也有一些优势,因为它允许负偏移,所以你可以在第2列中使用搜索文本,并使用-1作为偏移量,你可以从第1列返回数据

正如您所知,由于.find的工作方式,当您指定范围时,它将从 2nd 单元格开始,然后向下,并搜索第一个你最后给它的细胞。
例如以我的 A1:A6 为例,它将搜索 A2,A3,A4,A5,A6 ,最后 A1