在excel中创建列表,排除重复项

时间:2019-11-21 18:11:23

标签: arrays excel list excel-formula duplicates

我有一个MS Excel列表,其中A列中只有5个值。此列表中始终有一个随机重复的值。例如:

A1:A5 心 手指 头发 心 鼻子

这里“心”列出了两次。我需要一个公式来检测列表中出现两次的值,然后将此公式键入到列B1:B3中以创建一个新列表。新列表的结果应为剩余的三个值-因此不应包含Heart,因为它出现了两次。

另一个具有较好结果的示例...

A1:A5心,鼻子,头发,手指,手指

B1:B3心,鼻子,头发

在此示例中,手指被两次列出(在A列中),因此被排除在B列中(新列表)。

在使用Excel中的公式解决此问题方面,我将非常感谢所有的帮助和建议。

3 个答案:

答案 0 :(得分:0)

如果您对应该使用的帮助列感到满意,则可以使用以下解决方案:

Helper列1(在单元格B1中输入并向下拖动):

= COUNTIF(A:A,A1)

Helper列2(输入单元格C1并向下拖动):

= IF(B1=1,RANK(B1,B:B,1)+COUNTIF(B$1:B1,B1)-1,0)

输出列(在单元格D1中输入并向下拖动):

= INDEX(A:A,MATCH(ROW(),C:C,0))

请参见以下工作示例:

enter image description here

如有必要,您可以使用IFERROR来处理D列中的错误。

答案 1 :(得分:0)

夫妇选项:

  1. 如果您不在乎输出元素的位置,则此公式有效:

    =IF(COUNTIF($A1:$A$5,A1)>1,"",A1)
    
  2. 一种VBA方法:

    Public Function GetUniqueEntries(InputRange As Range) As Variant
        Dim Cell As Range
        Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
    
        For Each Cell In InputRange
            If Not dict.exists(Cell.Value2) Then dict.Add Cell.Value2, Cell.Value2
        Next
    
        GetUniqueEntries = Application.Transpose(dict.Items())
    End Function
    

    =GetUniqueEntries(A1:A5)输入。这是一个基于数组的公式,因此请记住选择足够宽的输出选择,然后按 Ctrl + Shift + Enter

    < / li>

答案 2 :(得分:0)

两个公式:

您可以使用:

=IFERROR(INDEX($A$1:$A$5,AGGREGATE(15,6,1/(COUNTIF($A$1:$A$5,$A$1:$A$5)=1)*ROW($A$1:$A$5),ROWS($1:1))),"")

如果您具有带有TEXTJOIN函数的Excel 2016,则可以使用:

=IFERROR(INDEX(FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,$A$1:$A$5) & "</s></t>","//s[not(.=preceding::*) and not(.=following::*)]"),ROWS($1:1)),"")

然后填写。

enter image description here

  • 创建一个XML,其中每一行都是一个单独的节点。
  • FILTERXMLxPath一起使用,该过滤器会过滤出在同一双胞胎之后或之后的任何节点。

编辑:如果您的Excel版本是2010年之前的版本,并且缺少AGGREGATE函数,则可以使用以下 array 公式:

=IFERROR(INDEX($A$1:$A$5,SMALL(IFERROR(1/(COUNTIF($A$1:$A$5,$A$1:$A$5)=1)*ROW($A$1:$A$5),10^6),ROWS($1:1))),"")

由于这是一个数组公式,因此您需要在按下 enter 的同时按住 ctrl + shift 来“确认”它。如果操作正确,Excel将按照公式栏中的说明在公式周围放置括号{...}