【问题标题】:Is there way to find duplicate words?有没有办法找到重复的单词?
【发布时间】:2013-08-12 10:59:08
【问题描述】:

我正在尝试查找/制作一个可以在 Excel 中查找所有重复单词的程序。例如在 A1 中的“某人”在 A2 中的“人”等,但我会有多次“某人”或另一个词,我需要将这些信息浓缩在一起。但我需要以一种我不这样做的方式来做t 手动搜索以连接重复。那么有没有办法找到重复的单词并将它们连接起来?

我也一直在考虑使用“查找”来查找它们,但它还没有产生任何运气。我也一直在使用“过滤器”,但我不知道如何在不手动操作的情况下压缩重复项。我还想知道在哪里可以找到“查找、替换等”等功能的代码?如果我能发现我可以更改“删除重复项”的编码以将其更改为单词。但是,嘿,我真的不知道这是否真的有效。任何事情都会有所帮助。

例如:

column1   column2   column3
-----------------------------
   y        A       (nothing) 
   z        B       (nothing) 
   z     (nothing)     I
   x     (nothing)     k
   y     (nothing)     j 
   x        C       (nothing)

到这里

column1   column2   column3
-----------------------------
   y         A         j
   z         B         I
   x         C         k

除了字母是单词。

【问题讨论】:

  • 也许你可以把工作表的图片和数据一起贴出来,然后我们可以从那里拿走

标签: vba excel excel-formula worksheet-function


【解决方案1】:

我不知道您是否可以使用 Excel 中的公式来执行此操作,除非您知道要在单元格中查找什么单词。您可以尝试使用 UDF 或正则表达式。

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

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

也许:

VBA Express

在您发布包含数据的 Excel 工作表后,我们会看看我是否弄错了!

【讨论】:

  • 您在 StackOverflow 上发布的内容:查看姓氏是否在单元格中重复的公式几乎是一样的,我正在努力获取 excel 文档
  • 我还不能发布图片,所以你需要从我的个人资料中获取我的头像,但当然你不能阅读它:P
【解决方案2】:

您可以使用高级过滤器将唯一值从第 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))

【讨论】:

    【解决方案3】:

    Sheet1 之前:

    代码:

    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 之后:

    确保使用字段名称。

    【讨论】:

      【解决方案4】:

      这将为您提供一个函数,该函数将针对特定字符串查找第一个非空白单元格

      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 的工作方式,当您指定范围时,它将从 第 2 个 单元格开始,然后向下搜索您的第一个单元格最后给它。
      例如以我的 A1:A6 为例,它将搜索 A2,A3,A4,A5,A6,最后搜索 A1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 2022-08-18
        • 2015-04-22
        • 2019-08-06
        相关资源
        最近更新 更多