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


77

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

Column A   Column B  
a          a
a          b
b          c
c
c

B列实际上将需要出现在同一工作簿中的另一张纸上,因此我认为它将需要使用sheet2!A1样式格式。

我对Data / Filter菜单选项没有任何运气,因为这似乎只能在命令下起作用。每当在A列中输入新值时,我都需要B列自动更新。

Answers:


66

Totero的答案是正确的。该链接也非常有帮助。

基本上,您需要的公式是:

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,否则它将无法正常工作。


9
如何摆脱N / A和0?
Moritz Schmitz诉Hülst15年

@MoritzSchmitzv.Hülst通过正确地指定范围来消除#N/AsIFERROR(...,"")并摆脱0,即$A$2:$A$20在示例中,如果您需要它是动态的,请使用OFFSET
Dan

B2在此公式中做什么?它与工作表中的任何内容都不相关,并且我一直都无法获得。
伊恩(Eoin)

2
哦,我通过按CTRL Shift&Enter来解决,但现在我只得到一个名字
-Eoin

如果我想将该内容复制到另一张纸上该怎么办?
Topa_17年

21

还有就是如何做到这一点很好的指导这里

基本上类似于:

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

1
嗨,Totero,当然,这个公式似乎适用于我要执行的操作,但是它正在返回“循环参考警告”,并在每个单元格中仅显示0。我究竟做错了什么?
tob88

5
循环引用表示您的公式位于一个单元格中,该单元格由同一公式引用。只需检查该公式不在A1:A20或单元格B1范围内即可。
树里Ruut

10

在我的情况下,使用

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

因为有很多行(10000)。所以我做了另一种方式,如下所示。

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

从Microsoft Office网站复制:

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

您要过滤。

单击范围的左上角的单元格,然后将其拖动到右下角的单元格。

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.

显示过滤的列表,并隐藏重复的行。

On the Edit menu, click Office Clipboard.

显示剪贴板任务窗格。

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

过滤后的列表将以边界轮廓突出显示,并且所选内容在剪贴板顶部以>>项的形式显示。

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

重新显示原始列表。

Press the DELETE key.

原始列表被删除。

In the Clipboard, click on the filtered list item.

过滤后的列表出现在与原始列表相同的位置。

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


科技含量低,非常有效。切记在复制和粘贴之前不要清除过滤器(对大多数人来说可能是显而易见的,但我是第一次被抓!)
Tom Auger


5

在已排序的列上,您也可以尝试以下方法:

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

可以粘贴B3。在最后一次唯一匹配之后,结果将为0。如果这是不必要的,请放置一些IF语句以排除此情况。

编辑:

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

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

如果数据为“ aabbcced d”,则公式将失败
Fahim Parkar 2012年

@FahimParkar是的,我知道,正如我说的那样:“在分类的专栏中”
Jook,2012年

哦,我没有注意到。最好强调这一点(即小
盲点

没关系。通常每个人都会选择代码并编写。没有人(至少自己)读过所有文本。因此更好地突出展示点。享受SO ...
Fahim Parkar 2012年

5

从列中删除重复项

  1. 对A栏A-> Z中的值进行排序
  2. 选择列B
  3. 在仍选择B列的情况下,在公式输入框中,输入

    =IF(TRIM(A1)=TRIM(A2),"",TRIM(A1))
    
  4. 在仍选择“列B”的情况下,选择“编辑”->“填充”->“向下”(在较新的版本中,只需选择单元格B1并下拉外部框以在列中一直向下扩展)

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


2

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

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

2

我在A2:A8范围内有一个颜色名称列表,在BI列中要提取不同的颜色名称列表。

请遵循以下给定步骤:

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

0

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

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

上面的公式指出,如果列A2的数据(A是列,而2是行号)与A3(A是列,而3是行号)相似,则它将打印Duplicate,否则将打印Not Duplicate。

让我们考虑一个示例,列A由电子邮件地址组成,其中有些重复,因此在列2中,我使用了上述公式,结果显示出2个重复的单元格,其中第2行和第6行。

您得到一个重复数据,只需将过滤器放在工作表上,仅使重复数据可见并删除所有不必要的数据。


0

老实说,我遵循了这些例子,但它们根本没有用。在竭尽全力地使Excel正常工作之后,我最终要做的就是将我的专栏的全部内容复制到NotePad ++中,在那里我可以在几分钟之内找到一个简单的解决方案。看一下这一点: 在Notepad ++中删除重复的行

编辑:这是有关如何在TextFX中进行的简要概述:

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

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

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


0

发现这里有错误控制时提到上述公式

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

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


0

您所需要做的就是:转到“数据”选项卡选择“排序和筛选”中的“高级操作”,选择:如果需要新列表,则复制到另一个位置-复制到任何位置,在列表范围内选择要删除记录的列表。最重要的是检查:仅唯一记录。


0
=SORT(UNIQUE(A:A))

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


仅供参考,UNIQUE()仅在Office 365中可用,而在较早的Excel中不可用。
罗斯·帕特森

0

自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的用户将无法刷新结果表。

-6

MODERN方法是考虑信息列来自Web服务(例如OData源)的情况。如果需要生成过滤器,请从已复制了该列值的海量数据中选择字段,请考虑以下代码:

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);

        });
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.