忽略重复并在Excel中创建唯一值的新列表

Ignore Duplicates and Create New List of Unique Values in Excel

我有一列值通常显示为重复。 我需要创建一个基于第一列的唯一值的新列,如下所示:

1
2
3
4
5
6
Column A   Column B  
a          a
a          b
b          c
c
c

这个B列实际上需要出现在同一工作簿中的不同工作表上,所以我认为它需要使用sheet2!A1样式格式。

我没有运气数据/过滤器菜单选项,因为这似乎只适用于命令。 每当在A列中输入新值时,我都需要B列自动更新。


托特罗的回答是正确的。该链接也非常有用。

基本上你需要的公式是:

1
B2=INDEX($A$2:$A$20, MATCH(0, COUNTIF($B$1:B1, $A$2:$A$20), 0))

然后按ctrl + shift + enter(或使用数组公式无效)。

这里要记住两个重要的事项:完整列表在单元格A2:A20中,然后必须将此公式粘贴到单元格B2(不是B1,因为这将为您提供循环引用)。
其次这是一个数组公式,所以你需要按ctrl + shift + enter,否则它将无法正常工作。


这里有一个很好的指导如何做到这一点。

基本上类似于:

1
=INDEX(Sheet1!$A$1:$A$20, MATCH(0, COUNTIF($B$1:B1,Sheet!$A$1:$A$20), 0))


在我的情况下,当使用公式时,excel被冻结

B2=INDEX($A$2:$A$20, MATCH(0, COUNTIF($B$1:B1, $A$2:$A$20), 0))

因为有很多行(10000)。所以我用另一种方式做了,我将在下面展示。

我已将原始列表复制到第二列,然后使用Excel"删除重复项"功能,我可以找到唯一值列表。

从Microsoft Office网站复制:

1
Select all the rows, including the column headers, in the list

you want to filter.

Click the top left cell of the range, and then drag to the bottom right cell.

1
2
3
On the Data menu, point to Filter, and then click Advanced Filter.
In the Advanced Filter dialog box, click Filter the list, in place.
Select the Unique records only check box, and then click OK.

The filtered list is displayed and the duplicate rows are hidden.

1
On the Edit menu, click Office Clipboard.

The Clipboard task pane is displayed.

1
Make sure the filtered list is still selected, and then click Copy Copy button.

The filtered list is highlighted with bounding outlines and the selection appears as an > > item at the top of the Clipboard.

1
On the Data menu, point to Filter, and then click Show All.

The original list is re-displayed.

1
Press the DELETE key.

The original list is deleted.

1
In the Clipboard, click on the filtered list item.

The filtered list appears in the same location as the original list.

资源:
Microsoft Office网站(链接已删除,导致死机)


从列中删除重复项

  • 对A A-> Z列中的值进行排序
  • 选择B列
  • 当列B仍处于选中状态时,在公式输入框中输入

    1
    =IF(TRIM(A1)=TRIM(A2),"",TRIM(A1))
  • 当B列仍处于选中状态时,选择编辑 - >填充 - >向下(在较新版本中,只需选择单元格B1并向下拉外框以在列中向下展开)

  • 注意:如果列B在另一张纸上,您可以执行Sheet1!A1和Sheet1!A2。


    在排序列上,您还可以尝试这个想法:

    1
    2
    B2=A2
    B3=IFERROR(INDEX(A:A,MATCH(B2,A:A,1)+1),"")

    B3可以粘贴下来。在最后一次独特匹配之后,它将结果为0。如果这是不需要的,请放置一些IF语句以排除这种情况。

    编辑:

    比IF语句更容易,至少对于文本值:

    1
    B3=IFERROR(T(INDEX(A:A,MATCH(B2,A:A,1)+1)),"")


    我有一个颜色名称列表A2:A8,在B列我想提取一个不同的颜色名称列表。

    按照以下给出的步骤:

    • 选择Cell B2;编写公式以从列表中检索唯一值。
    • =IF(COUNTIF(A$2:A2,A2)=1,A2,"")
    • 按键盘上的Enter
    • 该函数将返回第一种颜色的名称。
    • 要返回其余单元格的值,请将相同的公式复制下来。要复制范围B3:B8中的公式,请按键盘上的键CTRL + C复制单元格B2中的公式,然后按键CTRL + V粘贴到范围B3:B8中。
    • 在这里,您可以看到输出,其中我们有唯一的颜色名称列表。


    在包含列表的工作表的工作表模块中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal Target As Range)

        Dim rngDest As Range

        If Not Intersect(Target, Me.Columns(1)) Is Nothing Then

            Set rngDest = ThisWorkbook.Sheets("Sheet2").Range("A1")

            Me.Range(Me.Range("A2"), Me.Cells(Rows.Count, 1).End(xlUp)).AdvancedFilter _
                Action:=xlFilterCopy, CopyToRange:=rngDest, Unique:=True

        End If

    End Sub

    自Excel 2016起,另一种方法是使用Power Query。

    如何:

    • 选择数据(包括字段名称),
    • 使用菜单Data> From a table or a range
    • (Excel会将您的工作表更改为Excel表,这非常方便),
    • 在Power Query Editor中,右键单击ColumnA(列标题)和Remove duplicates
    • 在菜单中,选择Close and load,选择您想要的结果,然后就完成了,就像这样。
    • 每当您想要更新结果表时,右键单击它并选择Refresh

    好处:

    • 它仅在手动更新时才使用CPU,这非常方便
      对于长名单,
    • 如果你很好奇,这会提供许多其他强大的功能
      选项。

    缺点 :

    • 它不会即时更新(您必须右键单击并刷新
      结果表),
    • 使用旧版Excel的用户将无法刷新结果表。

    1
    =SORT(UNIQUE(A:A))

    如果要在列中列出唯一值,则上述公式最有效。


    你所要做的就是:
    转到数据选项卡
    选择Sort&Filter中的高级选项
    在操作中选择:如果需要新列表,请复制到另一个位置
    - 复制到任何位置
    在列表范围中,选择要获取记录的列表。
    最重要的是检查:
    仅限唯一记录。


    在这里找到上面提到的错误控制公式

    1
    =IFERROR(INDEX($B$2:$B$9, MATCH(0,COUNTIF($D$1:D1, $B$2:$B$9), 0)),"")

    其中:(B2:B9是要提取唯一值的列数据,D1是上面的公式所在的单元格)


    老实说,我把这些例子用于发球台,他们根本没用。在无意义地试图让Excel工作之后我最终做的就是将我的专栏的全部内容复制到NotePad ++,在那里我能够在几分钟内找到一个简单的解决方案。看看这个:删除Notepad ++中的重复行

    编辑:以下是如何在TextFX中执行此操作的简要概述:

    插件 - >插件管理器 - >显示插件管理器 - >可用选项卡 - > TextFX - >安装

    在NotePad ++中安装TextFX后,然后选择要从中删除重复项的所有文本,然后确保检查:TextFX - > TextFX工具 - >仅排序输出UNIQUE行

    然后单击"排序区分大小写"或"排序行不区分大小写",它将执行唯一排序。


    因此,对于此任务首先按照从A到Z或Z到A的顺序对数据进行排序,然后您可以使用如下所述的一个简单公式:

    1
    =IF(A2=A3,"Duplicate","Not Duplicate")

    上面的公式表明,如果列A2数据(A是列,2是行号)类似于A3(A是列,3是行号),那么它将打印Duplicate else将打印Not Duplicate。

    让我们考虑一个例子,A列包含电子邮件地址,其中一些是重复的,所以在第2列中,我使用了上述公式,在结果中显示了2个重复单元格,其中一个是第2行和第6行。

    你得到重复数据只需将过滤器放在工作表上,只显示重复数据并删除所有不必要的数据。


    MODERN方法是考虑信息列来自诸如OData源之类的Web服务的情况。如果您需要从具有列的复制值的海量数据生成过滤器选择字段,请考虑以下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    var CatalogURL = getweb(currenturl)
                     +"/_api/web/lists/getbytitle('Site%20Inventory%20and%20Assets')/items?$select=Expense_x0020_Type&$orderby=Expense_x0020_Type";

    /* the column that is replicated, is ordered by <column_name> */

        OData.read(CatalogURL,
            function(data,request){

                var myhtml ="";
                var myValue ="";

                for(var i = 0; i < data.results.length; i++)
                {
                    myValue = data.results[i].Expense_x0020_Type;

                    if(i == 0)
                    {
                            myhtml +="<option value='"+myValue+"'>"+myValue+"</option>";
                    }
                    else
                    if(myValue != data.results[i-1].Expense_x0020_Type)
                    {
                            myhtml +="<option value='"+myValue+"'>"+myValue+"</option>";

                    }
                    else
                    {

                    }


                }

                $("#mySelect1").append(myhtml);

            });