【问题标题】:Excel compare two columns and highlight duplicatesExcel比较两列并突出显示重复项
【发布时间】:2012-04-18 00:24:26
【问题描述】:

我有一个 Excel 文件,A 列中有 10,000 行,其中一些值是相同的。

例子:

A1 - P7767

A2 - P3443

A3 - P7767

A4 - P8746

A5 - P9435

等等……

然后我有另一列有 100 行,其中包含在 A 列中找到的一些值,

B1 - P7767

B2 - P8746

等等……

我需要突出显示 A 列中的所有单元格,其中值在 B 列中的任何值中都可以找到

所以基本上B列检查它是否可以在A列的任何地方找到相同的值,如果为真,则突出显示单元格,当在B列中找不到该值时,任何单元格都留白

我希望我已经很好地解释了这一点,我已经做了一些研究,我相信我需要使用条件格式来获得这个结果,但我真的被困在要使用的公式上,似乎无法在网上找到一个例子(也许我我没有搜索正确的术语,因为我不确定它的确切名称)

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    可能有一个更简单的选项,但您可以使用 VLOOKUP 来检查一个值是否出现在列表中(而且 VLOOKUP 是一个强大的公式,无论如何都可以掌握)。

    所以对于A1,可以使用以下公式设置条件格式:

    =NOT(ISNA(VLOOKUP(A1,$B:$B,1,FALSE)))
    

    复制和选择性粘贴 > 格式以将该条件格式复制到 A 列中的其他单元格。

    上面的公式是做什么的:

    • VLOOKUP 正在第一列(这是第三个参数,这里是多余的,但通常 VLOOKUP 会查找一个表)中的整个 B 列 ($B:$B) 查找单元格 A1(第一个参数)的值而不是一列)。最后一个参数 FALSE 指定匹配必须是精确的,而不仅仅是最接近的匹配。
    • 如果未找到匹配项,VLOOKUP 将返回 #ISNA,因此 NOT(ISNA(...)) 对于在 B 列中有匹配项的所有单元格返回 true。

    【讨论】:

    • 嗨,大卫,这非常有效,谢谢!只是想多谢您解释公式的作用,这对我将来有很大帮助。亲切的问候,凯尔
    • 我的荣幸。公平地说,我认为 chris neilsen 的方法(已投赞成票)也行得通,而且可能更优雅。
    • 我对这个答案的赞成票数量感到困惑。 @chrisneilsen 答案更简单。除此之外,INDEX/MATCH 在各方面都比 VLOOKUP 好得多。它可以做完全相同的事情,但更好。它更快、更通用(您可以在左侧查找值)、更可靠(插入列不会破坏它)、更易于使用(您不必计算列)。 VLOOKUP 是从 Lotus-123 继承的过时函数 - excel-vba.com/excel-formula-vlookup.htm
    【解决方案2】:

    一个简单的公式是

    =COUNTIF($B:$B,A1)
    

    指定的公式适用于单元格 A1。只需将特殊格式复制并粘贴到整个 A 列

    【讨论】:

      【解决方案3】:

      注意:在执行这些步骤之前,您可能需要删除重复项(例如同一列中的重复条目)以防止误报。

      1. 选择两列
      2. 点击条件格式
      3. 单击突出显示单元格规则
      4. 点击 Duplicate Values(默认应该没问题)
      5. 重复项现在以红色突出显示:

      【讨论】:

      • 这非常快速和简单 (+1),但有一个警告:如果 same 列中有重复数据,即使这些值是不在另一列中。这意味着可能存在一些误报。另一方面,如果同一列内没有重复数据,这似乎是最佳选择。当然,您可以在使用它突出显示重复单元格之前删除同一列中的重复项(选择列,数据 -> 删除重复项)。
      【解决方案4】:

      至少对我而言,最简单的方法是:

      条件格式->添加新规则->设置自己的公式:

      =ISNA(MATCH(A2;$B:$B;0))
      

      其中 A2 是 A 列中要比较的第一个元素,B 是要搜索 A 的元素的列。

      设置公式并选择格式后,将此规则应用于列中的所有元素。

      希望对你有帮助

      【讨论】:

        【解决方案5】:

        A1 --> 条件格式 --> 单元格值为 B1 --> 格式:任意格式

        希望对你有帮助

        【讨论】:

          【解决方案6】:

          假设您想比较同一个电子表格中的 A 列和 H 列。

          您需要在这两列旁边的另一列中粘贴以下公式: =(Sheet1!A:A=Sheet1!H:H) 这将在列中显示 FALSE 或 TRUE。因此,您可以使用此新列使用条件颜色格式功能为不匹配的值着色。

          【讨论】:

            【解决方案7】:

            我试图比较 A-B 列并突出显示相同的文本,但使用上面的字体,一些文本根本不匹配。因此,我使用了表单 (VBA macro to compare two columns and color highlight cell differences) 代码并修改了一些内容以使其适应我的应用程序并找到任何所需的列(只需单击它)。就我而言,我在每列上使用大量不同数量的行。希望这会有所帮助:

            Sub ABTextCompare()

            Dim Report As Worksheet
            Dim i, j, colNum, vMatch As Integer
            Dim lastRowA, lastRowB, lastRow, lastColumn As Integer
            Dim ColumnUsage As String
            Dim colA, colB, colC As String
            Dim A, B, C As Variant
            
            Set Report = Excel.ActiveSheet
            vMatch = 1
            
            'Select A and B Columns to compare
            On Error Resume Next
             Set A = Application.InputBox(Prompt:="Select column to compare", Title:="Column A", Type:=8)
              If A Is Nothing Then Exit Sub
            colA = Split(A(1).Address(1, 0), "$")(0)
             Set B = Application.InputBox(Prompt:="Select column being searched", Title:="Column B", Type:=8)
               If A Is Nothing Then Exit Sub
              colB = Split(B(1).Address(1, 0), "$")(0)
             'Select Column to show results
             Set C = Application.InputBox("Select column  to show results", "Results", Type:=8)
                If C Is Nothing Then Exit Sub
              colC = Split(C(1).Address(1, 0), "$")(0)
            
            'Get Last Row
            lastRowA = Report.Cells.Find("", Range(colA & 1), xlFormulas, xlByRows, xlPrevious).Row - 1 ' Last row in column A
            lastRowB = Report.Cells.Find("", Range(colB & 1), xlFormulas, xlByRows, xlPrevious).Row - 1 ' Last row in column B
            
             Application.ScreenUpdating = False
            '***************************************************
            For i = 2 To lastRowA
                  For j = 2 To lastRowB
                      If Report.Cells(i, A.Column).Value <> "" Then
                          If InStr(1, Report.Cells(j, B.Column).Value, Report.Cells(i, A.Column).Value, vbTextCompare) > 0 Then
                              vMatch = vMatch + 1
                              Report.Cells(i, A.Column).Interior.ColorIndex = 35 'Light green background
                              Range(colC & 1).Value = "Items Found"
                              Report.Cells(i, A.Column).Copy Destination:=Range(colC & vMatch)
                              Exit For
                          Else
                              'Do Nothing
                          End If
                      End If
                  Next j
              Next i
            If vMatch = 1 Then
                MsgBox Prompt:="No Itmes Found", Buttons:=vbInformation
            End If
            '***************************************************
            Application.ScreenUpdating = True
            

            结束子

            【讨论】:

              【解决方案8】:

              伙计们,不要做太多工作。 只需按 Ctr 并选择第一列,然后按 Ctr 并选择第二列。 然后点击条件格式 -> 突出显示单元格规则 -> Equel To。

              就是这样。你完成了。 :)

              【讨论】:

              • 这不是对所提问题的回答。
              猜你喜欢
              • 1970-01-01
              • 2020-12-01
              • 2019-11-06
              • 2018-08-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多