我有一个MS Excel列表,其中A列中只有5个值。此列表中始终有一个随机重复的值。例如:
A1:A5 心 手指 头发 心 鼻子
这里“心”列出了两次。我需要一个公式来检测列表中出现两次的值,然后将此公式键入到列B1:B3中以创建一个新列表。新列表的结果应为剩余的三个值-因此不应包含Heart,因为它出现了两次。
另一个具有较好结果的示例...
A1:A5心,鼻子,头发,手指,手指
B1:B3心,鼻子,头发
在此示例中,手指被两次列出(在A列中),因此被排除在B列中(新列表)。
在使用Excel中的公式解决此问题方面,我将非常感谢所有的帮助和建议。
答案 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))
请参见以下工作示例:
如有必要,您可以使用IFERROR
来处理D
列中的错误。
答案 1 :(得分:0)
夫妇选项:
如果您不在乎输出元素的位置,则此公式有效:
=IF(COUNTIF($A1:$A$5,A1)>1,"",A1)
一种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 。
答案 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)),"")
然后填写。
XML
,其中每一行都是一个单独的节点。FILTERXML
与xPath
一起使用,该过滤器会过滤出在同一双胞胎之后或之后的任何节点。 编辑:如果您的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将按照公式栏中的说明在公式周围放置括号{...}