忽略重复项并创建Excel中独特数值的新列表

77

我有一列数值,经常出现重复。我需要创建一个新的列,其中包含基于第一列的唯一值,如下所示:

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

这个B列需要出现在同一工作簿的另一个工作表上,因此我认为它需要使用sheet2!A1格式。

我尝试使用数据/筛选菜单选项,但没有成功,因为这只适用于命令。每当将新值输入A列时,我需要B列自动更新。

14个回答

65

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 v. Hülst
@MoritzSchmitzv.Hülst 使用 IFERROR(...,"") 消除 #N/A,通过正确指定范围,即在示例中使用 $A$2:$A$20 来消除 0,如果需要动态,则使用 OFFSET - Dan
这个公式中的B2是什么作用?它与我的表格中的任何内容都没有关系,我一直得到N/A。 - Eoin
2
哦,我通过按下CTRL Shift&Enter键解决了问题,但现在我只得到一个名称。 - Eoin
那如果我想将这个内容复制到另一个工作表呢? - Topa_14
1
请注意,B1单元格中输入=A1,B2单元格中输入=INDEX($A$2:$A$20, MATCH(0, COUNTIF($B$1:B1, $A$2:$A$20), 0)),B3单元格中输入=INDEX($A$2:$A$20, MATCH(0, COUNTIF($B$1:B2, $A$2:$A$20), 0)),以此类推。请注意,唯一变化的是:B1,这就是为什么它被标记为相对引用。 - shlgug

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单元格中。 - Jüri Ruut

10
在我的情况下,使用以下公式时Excel表格会被冻结: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.
答案:

筛选后的列表会出现在与原始列表相同的位置。


低技术且非常有效。记得在复制粘贴之前不要清除过滤器(这对大多数人来说可能是显而易见的,但第一次我就被抓了!) - Tom Auger
链接在这里:https://support.office.com/zh-cn/article/%E8%BF%87%E6%BB%A4%E5%94%AF%E4%B8%80%E5%80%BC%E6%88%96%E5%8E%BB%E9%99%A4%E9%87%8D%E5%A4%8D%E7%9A%84%E5%80%BC-ccf664b0-81d6-449b-bbe1-8daaec1e83c2 - tavnab

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

如果数据为 "a a b b c c e d d",则您的公式会失败。 - Fahim Parkar
@FahimParkar 是的,我知道,就像我说的:“在一个已排序的列上”。 - Jook
哦,我没有注意到那个。最好突出这样的要点(它们很重要)。 - Fahim Parkar
欢迎您。通常每个人都会选择代码并编写。没有人阅读(至少我自己)所有文本。因此最好突出重点。享受SO... - Fahim Parkar

5

从列中删除重复项

  1. Sort the values in column A A->Z
  2. Select column B
  3. While column B is still selected, in the formula input box, enter

    =IF(TRIM(A1)=TRIM(A2),"",TRIM(A1))
    
  4. While Column B is still selected, select Edit -> Fill -> Down (in newer versions, simply select cell B1 and pull down the outer box to expand all the way down in the column)

注意: 如果B列在另一个工作表中,您可以使用Sheet1!A1和Sheet1!A2。


3
=SORT(UNIQUE(A:A))

如果您想在一列中列出唯一值,那么上述公式最为适用。


请注意,UNIQUE() 仅适用于 Office 365,而不适用于旧版的 Excel。 - Ross Patterson

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

1

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

按照以下步骤操作:

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

这会留下空缺。 - ShadSterling
这留下了空白。 - ShadSterling

0

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

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

上述公式说明,如果A2列数据(A是列,2是行号)与A3(A是列,3是行号)相似,则打印“重复”,否则打印“不重复”。

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

一旦您获得了重复数据,只需在工作表上放置筛选器,并仅使重复数据可见并删除所有不必要的数据即可。


0

在上述公式中查找带有错误控制的此处提到

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接