1

我有一个 MS Excel 列表,A 列中只有 5 个值。此列表中总会有一个随机重复值。例如:

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

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

另一个具有首选结果的示例...

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

B1:B3 心脏、鼻子、头发

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

非常感谢所有关于如何使用 Excel 中的公式解决此问题的 hjelp 和建议。

4

3 回答 3

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

于 2019-11-21T19:54:03.997 回答
0

如果您对帮助列没问题,您应该是,您可以使用此解决方案:

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

= COUNTIF(A:A,A1)

辅助栏 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))

请参见下面的工作示例:

在此处输入图像描述

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

于 2019-11-21T19:37:56.497 回答
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)),"")

并填写。

在此处输入图像描述

  • 创建一个XML其中每一行都是一个单独的节点。
  • FILTERXML与 an 一起使用可xPath过滤掉其同卵双胞胎之后或之前的任何节点。

编辑: 如果您的 Excel 版本早于 2010 年,并且缺少该AGGREGATE功能,则可以使用以下数组公式:

=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))),"")

由于这是一个数组公式,您需要在按住ctrl+的shift同时点击“确认”它enter。如果您正确执行此操作,Excel 将{...}在公式周围放置大括号,如公式栏中所示

于 2019-11-21T23:13:32.887 回答