Note: The other languages of the website are Google-translated. Back to English

如何从Excel中的多个列中提取唯一值?

假设您有多个具有多个值的列,则某些值在同一列或不同列中重复。 现在,您只想查找任一列中存在的值一次。 是否有任何快速技巧可以从Excel中的多个列中提取唯一值?


使用数组公式从多个列中提取唯一值

这是一个数组公式,也可以帮助您从多个列中提取唯一值。

1。 假设您的值在范围内 A2:C9,请在单元格E2中输入以下公式:

=INDIRECT(TEXT(MIN(IF(($A$2:$C$9<>"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&""

备注:在以上公式中, A2:C9 表示要提取唯一值的单元格范围, E1:E1 是您要放置结果的列的第一个单元格, $ 2:$ 9 这些行包含要使用的单元格,并且 $ A:$ C 表示列包含您要使用的单元格。 请更改为您自己的。

2。 然后按 Shift + Ctrl + 输入 键,然后拖动填充手柄以提取唯一值,直到出现空白单元格。 看截图:


使用数据透视表从多个列中提取唯一值

如果您熟悉数据透视表,则可以按照以下步骤轻松地从多个列中提取唯一值:

1。 首先,请在数据左侧插入一个新的空白列,在本例中,我将在原始数据旁边插入A列。

2。 单击数据中的一个单元格,然后按 Alt + D 键,然后按 P 立即打开钥匙 数据透视表和数据透视图向导,选择 多种合并范围 在向导step1中,查看屏幕截图:

3。 然后点击 下一页 按钮,检查 为我创建一个页面字段 向导步骤2中的选项,请参见屏幕截图:

4。 继续点击 下一页 按钮,单击以选择包括左侧新的单元格列的数据范围,然后单击 加入 按钮将数据范围添加到 所有范围 列表框,请参见屏幕截图:

5。 选择数据范围后,继续单击 下一页 ,在向导的第3步中,根据需要选择要放置数据透视表报表的位置。

6. 最后点击 结束通话 以完成向导,并在当前工作表中创建了一个数据透视表,然后取消选中 选择要添加到报告中的字段 部分,请参见屏幕截图:

7. 然后检查现场 或将值拖到 标签,现在您将从多个列中获得唯一值,如下所示:


使用VBA代码从多个列中提取唯一值

使用以下VBA代码,您还可以从多个列中提取唯一值。

1。 按住 ALT + F11 键,然后打开 Microsoft Visual Basic for Applications窗口.

2。 点击 插页 > 模块,然后将以下代码粘贴到“模块窗口”中。

VBA:从多个列中提取唯一值

Sub Uniquedata()
'Updateby Extendoffice
Dim rng As Range
Dim InputRng As Range, OutRng As Range
Set dt = CreateObject("Scripting.Dictionary")
xTitleId = "KutoolsforExcel"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
For Each rng In InputRng
    If rng.Value <> "" Then
        dt(rng.Value) = ""
    End If
Next
OutRng.Range("A1").Resize(dt.Count) = Application.WorksheetFunction.Transpose(dt.Keys)
End Sub

3。 然后按 F5 运行此代码,将弹出一个提示框,提醒您选择要使用的数据范围。 看截图:

4。 然后点击 OK,将出现另一个提示框,让您选择放置结果的位置,请参见屏幕截图:

5. 单击 OK 关闭此对话框,并立即提取所有唯一值。


从一个单一的列中提取具有独特功能的独特值

有时,您需要从单个列中提取唯一值,上述方法将无济于事,在这里,我可以推荐一个有用的工具-Kutools for Excel,其 提取具有唯一值的单元格(包括第一个重复项) 实用程序,您可以快速提取唯一值。

请注意:申请这个 提取具有唯一值的单元格(包括第一个重复项),首先,您应该下载 Kutools for Excel,然后快速轻松地应用该功能。

安装后 Kutools for Excel,请这样做:

1。 单击要在其中输出结果的单元格。 (备注:不要单击第一行中的单元格。)

2。 然后点击 库工具 > 公式助手 > 公式助手,请参见屏幕截图:

3。 在 公式助手 对话框,请执行以下操作:

  • 选择 文本 选项从 公式 类型 下拉列表;
  • 然后选择 提取具有唯一值的单元格(包括第一个重复项) 来自 选择一个草 列表框;
  • 在右边 参数输入 部分中,选择要提取唯一值的单元格列表。

4。 然后点击 Ok 按钮,然后将填充手柄拖到要列出所有唯一值的单元格上,直到显示空白单元格为止,请参见屏幕截图:

立即免费下载Kutools for Excel!


更多相关文章:

  • 计算列表中唯一值和不同值的数量
  • 假设您的值列表很长,其中包含一些重复项,现在,您要计算唯一值(仅一次出现在列表中的值)或不同值(列表中所有不同值的数量)的数量值+第一个重复值),如左图所示。 本文,我将讨论如何在Excel中处理此工作。
  • 根据Excel中的条件提取唯一值
  • 假设您具有以下数据范围,您希望根据列A的特定标准仅列出列B的唯一名称,以得到结果,如下面的屏幕快照所示。 您如何在Excel中快速轻松地处理此任务?
  • 仅在Excel中允许唯一值
  • 如果您只想在工作表的列中输入唯一值并防止重复,则本文将介绍一些快速技巧来帮助您完成此任务。
  • 根据Excel中的条件求和唯一值
  • 例如,我现在有一系列数据,其中包含“名称”和“订单”列,以根据“名称”列仅对“订单”列中的唯一值求和,如下图所示。 如何在Excel中快速轻松地解决此任务?

最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能。 支持Office / Excel 2007-2019和365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能30天免费试用。 60天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (26)
5中的5评分 · 1评级
该评论由网站上的主持人最小化
Is this formula complete? =INDIRECT(TEXT(MIN(IF(($A$2:$C$9"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&"",
该评论由网站上的主持人最小化
这还没有修复:sad:
该评论由网站上的主持人最小化
多么浪费时间......公式不起作用
该评论由网站上的主持人最小化
谢谢!!! 我一直在花费数小时试图做到这一点并弄清楚 Pivot Wizard 发生了什么(其他文章)。
该评论由网站上的主持人最小化
我正在使用您的 VBA 代码,但不希望该框弹出。 相反,我想准确定义每次使用的单元格范围以及将输出放入的确切框。输入范围和输出将位于两个不同的工作表上。 我如何更新 VBA 来做到这一点? 谢谢!!
该评论由网站上的主持人最小化
嘿! 有谁知道为什么这个公式在第 87 行之后似乎会导致错误? 就像,它完美地工作,然后在某一点上它只是返回我每一行的错误..这是最糟糕的! 因为我非常接近我在这里需要的东西......
该评论由网站上的主持人最小化
=INDIRECT(TEXT(MIN(IF(($A$2:$C$9"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&"" It doesn't work
该评论由网站上的主持人最小化
嗨,当我将第一列与另一列(我有三个不相等的列)进行比较时,我想从第一列中提取唯一的单元格,我该怎么做?
该评论由网站上的主持人最小化
嗨,我有三个不相等的列,想提取第一列的唯一单元格。 我该怎么做?? 提前致谢
该评论由网站上的主持人最小化
我喜欢

使用数据透视表从多列中提取唯一值
该评论由网站上的主持人最小化
您能否提交正确的公式... VBA 函数工作得很好。
就我的项目而言,我宁愿使用正确的公式。


谢谢
该评论由网站上的主持人最小化
有谁知道,对于输出,如何使它变成几行而不是一行? (currently one line result is achieved by worksheetfunction.transpose, but what i want to achieve (as result) is that when select for 3 columns, the returned result are also 3 columns, instead one
该评论由网站上的主持人最小化
这个数组公式是正确的。 A到C列中的数据,单元格D2中的第一个结果公式......这个与其他数组公式不同,后者是向下复制公式和Ctrl + Shift + Enter所有公式。 但是,这个数组公式应该在第一个单元格中按 Ctrl+Shift+Enter 并向下复制。
该评论由网站上的主持人最小化
Muchas gracias por la macro!!! 我很实用
该评论由网站上的主持人最小化
我已经调整到我的工作表,但只返回定义数组中的第一个值......我错过了什么?
该评论由网站上的主持人最小化
你好,科迪,
上面的公式在我的工作表中效果很好,你能在这里给你的数据问题截图吗?
谢谢!
该评论由网站上的主持人最小化
关于公式版本,您能否更详细地解释这部分的作用? *100+COLUMN($A:$C),7^8)),"R0C00") 具体来说,有哪些 * 100, ^ 7 8“R0C000” 正在做? 我理解其他所有内容,但我无法弄清楚这些是什么。
该评论由网站上的主持人最小化
我在这里的回复有点晚了,但是......
ROW($2:$9)*100 - 这是行号 *100 的乘积,所以如果它在第 5 行,现在的数字是 500
COLUMN($A:$C) - 这被添加到第 100 行数字,所以如果它是第 5 行第 2 列,那么数字是 502。
7^8)), - 这(我认为)是为之前的 min 语句设置一个最大值。
"R0C00") - 根据数字格式化文本。 在示例中,我们有 502,所以这给出了 R5C02(第 5 行,第 02 列)。

如果您有很多列但没有很多行,那么您可以将其更改为 ROW($2:$9)*1000+COLUMN($A:$C),7^8)),"R0C000")
该评论由网站上的主持人最小化
感谢您的代码。 我正在使用此页面的 VBA 代码。 有没有办法在提取唯一值后添加排序代码以便自动排序?
该评论由网站上的主持人最小化
我们可以创建 uniqdata 函数而不是宏吗?
该评论由网站上的主持人最小化
嗨,İlhan,如果您喜欢用户定义函数来创建解决此问题的公式,下面的代码可能会对您有所帮助:插入代码后,选择要放置结果的单元格列表。 然后输入这个公式:=独特(A1:C4)  在公式栏中。按 按Ctrl + Shift + Enter组合 钥匙在一起。 


Function Uniques(ByVal inputRange As Range)
Dim inputArray As Variant
Dim myColl As New Collection
Dim xVal As Variant
Dim outArray() As Variant
On Error Resume Next
With inputRange
inputArray = Application.Intersect(.Cells, .Parent.UsedRange).Value
End With
On Error GoTo 0
On Error Resume Next
For Each xVal In inputArray
myColl.*** Item:=xVal, Key:=(CStr(xVal) & TypeName(xVal))
Next xVal
myColl.Remove "String"
On Error GoTo 0
ReDim outArray(1 To Application.Max(myColl.Count, Application.Caller.Cells.Count))
For xVal = 1 To UBound(outArray)
outArray(xVal) = vbNullString
Next xVal
For xVal = 1 To Application.Min(myColl.Count, Application.Caller.Cells.Count)
outArray(xVal) = myColl(xVal)
Next xVal
If Application.Caller.Columns.Count = 1 Then
Uniques = Application.Transpose(outArray)
Else
Uniques = outArray
End If
End Function
查看附件 (1 / 5)
该评论由网站上的主持人最小化
Czy 到 żart?
该评论由网站上的主持人最小化
顶部的数组公式在与同一张表中的数据一起使用时效果很好,但是当我尝试使用它从另一张表中引用相同的确切数据时,该公式不返回任何内容。 我无法弄清楚为什么。 数组函数是否存在阻止您在不同工作表中引用范围的限制?

感谢您提供的任何见解。
该评论由网站上的主持人最小化
你好艾琳,

乐意效劳。 此公式中的 INDIRECT 函数在引用其他工作表中的数据时使用起来更加复杂。 在不同工作表中引用范围时,不建议使用此功能。

例如:现在数据在Sheet1中,我想在Sheet2中引用Sheet1的单元格C2的内容。 首先,在 Sheet2 的任意两个单元格中,例如 D1 和 D2,分别输入 Sheet1 和 C2。 此时,在Sheet2的空单元格中输入公式:
=INDIRECT("'"&D1&"'!"&D2),则可以返回Sheet2中C1单元格的内容。

如您所见,它使事情变得更加复杂。 希望我的解释能有所帮助。 祝你今天过得愉快。

Sincerely,
曼迪
该评论由网站上的主持人最小化
先生,你好! VBA 创造了奇迹,非常感谢您! 我想知道,如果我更改原始数据,是否可以自动刷新具有唯一值的列?
5中的5评分
该评论由网站上的主持人最小化
你好伊奥尼斯,

乐意效劳。 更改原始数据后,VBA 无法自动刷新结果。 我能想到的最简单的方法是按 Ctrl + Alt + F9 刷新所有打开的工作簿中的工作表中的所有结果。 祝你今天过得愉快。

Sincerely,
曼迪
这里还没有评论
留下你的意见
以访客身份发帖
×
评价此帖子:
0   产品特性
建议地点