2

我正在尝试查找/制作一个可以在 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

除了字母是单词。

在此处输入图像描述

4

4 回答 4

1

您可以使用高级过滤器将唯一值从第 1 列复制到新列。然后,您将使用 vlookup 公式来获取其余部分。

假设:

  • 第 1 行是标题行,因此实际数据从第 2 行开始
  • Column1 是“A”列
  • 第 2 列是“B”列
  • 第 3 列是“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))
于 2013-08-10T19:24:07.073 回答
1

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 之后: 在此处输入图像描述

确保使用字段名称。

于 2013-08-10T22:12:20.240 回答
1

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

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

StackOverflow:查看姓氏是否在单元格内重复的公式

有可能:

VBA 快递

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

于 2013-08-10T18:57:28.210 回答
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 电子表格中,您可以使用一个公式,该公式将在A1:A6=NonBlankLookup(E1,$A$1:$A$6,1)中搜索您的文本,并检查右侧的 1 列。如果没有找到与搜索字符串匹配的文本,或者如果找到了文本但指定列中不存在数据,则#NULL!被退回。 这对 vlookup 也有一点优势,因为它允许负偏移量,因此您可以在第 2 列中有搜索文本,并且通过使用 -1 作为偏移量,您可以从第 1 列返回数据

请注意,由于这种.find工作方式,当您指定范围时,它将从第二个单元格开始,然后向下搜索您最后给它的第一个单元格。
例如,在我的A1:A6示例中,它将搜索A2,A3,A4,A5,A6,最后是A1

于 2013-08-21T14:06:37.810 回答