首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅使用公式获取Excel中的唯一值

仅使用公式获取Excel中的唯一值
EN

Stack Overflow用户
提问于 2009-09-15 22:12:36
回答 20查看 409.2K关注 0票数 75

你知道在Excel中通过公式“计算”一组唯一值的方法吗?

例如:垂直范围包含值"red""blue""red""green""blue""black"

我希望最终有两个"red"blue""green""black" +的空单元格。

我已经找到了一种使用SMALL或LARGE结合索引来获得计算排序列表的方法,但我也希望使用这种计算排序,而不使用VBA。

EN

回答 20

Stack Overflow用户

回答已采纳

发布于 2015-05-11 12:09:36

这是一个老生常谈的问题,有一些解决方案,但我想出了一个比我遇到的任何其他公式更短、更简单的公式,它可能对任何路过的人都有用。

我已经将颜色列表命名为Colors (A2:A7),并且数组公式 put in cell C2是这样(fixed):

代码语言:javascript
复制
=IFERROR(INDEX(Colors,MATCH(SUM(COUNTIF(C$1:C1,Colors)),COUNTIF(Colors,"<"&Colors),0)),"")

使用Ctrl+Shift+Enter C2 中输入公式,然后将C2复制到C3:C7

示例数据说明{"red";"blue";"red";"green";"blue";"black"}:

  1. COUNTIF(Colors,"<"&Colors)返回一个数组(#1),其中的值计数小于数据{4;1;4;3;1;0} (black=0项更小,blue=1项,red=4项)。这可以转换为一个排序值 for each item.
  2. COUNTIF(C$1:C...,Colors)返回一个数组(#2),对于已经存在于排序结果中的每个数据项,返回1。在C2中,它返回{0;0;0;0;0;0};在C3中,它返回{0;0;0;0;0;1},因为"black“在排序中排在第一,在数据中排在最后。在C4 {0;1;0;0;1;1}中,它表示“黑色”,并且所有出现的“蓝色”都已经存在。
  3. SUM通过对已经出现的所有较小的值进行计数,返回第k个排序值(数组#2).
  4. MATCH的总和查找第k个排序值的第一个索引(索引在数组#1中)。
  5. IFERROR仅用于在排序的唯一列表完成时隐藏底部单元格中的#N/A错误。

要知道你有多少个独特的项目,你可以使用这个常规公式:

代码语言:javascript
复制
=SUM(IF(FREQUENCY(COUNTIF(Colors,"<"&Colors),COUNTIF(Colors,"<"&Colors)),1))
票数 29
EN

Stack Overflow用户

发布于 2009-09-17 01:04:31

好吧,我有两个想法给你。希望其中的一个能带你去你想去的地方。请注意,第一个解决方案忽略了作为公式执行此操作的请求,因为该解决方案并不美观。我想我要确保这个简单的方法真的不适合你;^)。

使用高级过滤器命令

  1. 选择列表(或将所选内容放在列表内的任何位置,如果出现对话框提示Excel不知道列表是否包含标题,请单击确定)
  2. 选择数据/高级筛选器
  3. 选择“就地筛选列表”或“复制到另一个位置”
  4. 单击“仅唯一记录”

<代码>H19单击确定<代码>H210<代码>H111您完成了。在原地或在新位置创建唯一列表。请注意,您可以记录此操作以创建一行VBA脚本来执行此操作,然后可以将其推广到其他情况下为您工作(例如,不需要上面列出的手动步骤)。

使用公式(注意,我是在Locksfree解决方案上构建的,以得到一个没有漏洞的列表)

此解决方案将与以下注意事项一起使用:

  • 列表必须排序(升序或降序无关紧要)。实际上,这是非常准确的,因为所有的like项都必须是连续的,但排序是达到这种状态的最简单的方法。
  • 需要三个新列(两个新列用于计算,一个新列用于新列表)。第二列和第三列可以组合在一起,但我将把它作为练习留给读者。

以下是解决方案的摘要:

  1. 对于列表中的每一项,计算其上方的重复项的数量。
  2. 对于唯一列表中的每个位置,计算下一个唯一项的索引。
  3. 最后,使用索引创建一个仅包含唯一项的新列表。

下面是一个循序渐进的例子:

  1. 在A1中打开新的电子表格
  2. :A6输入原始问题中给出的示例(“红色”,“蓝色”,“红色”,“绿色”,“蓝色”,“黑色”)
  3. 对列表进行排序:将选定内容放入列表中,然后选择排序命令。
  4. 在B列中,计算重复项:
    1. In B1,输入"=IF(COUNTIF($A$1:A1,A1) = 1,0,COUNTIF(A1:$A$6,A1))“。请注意,单元格引用中的"$“非常重要,因为它将使下一步(填充列的其余部分)变得更容易。"$“表示绝对引用,因此当复制/粘贴单元格内容时,引用不会更新(与将更新的相对引用相反)。
    2. 使用智能备份填充B列的其余部分: Select B1。将鼠标移到所选内容右下角的黑色方块上。单击并向下拖动到列表底部(B6)。当您发布时,公式将被复制到B2:B6中,并更新相对引用。
    3. B1:B6的值现在应该是"0,0,1,0,0,1“。请注意,"1“条目表示重复项。

  • 在列C中,创建唯一项的索引:
  1. 在C1中,输入“=()”。你真的只想要C1 = 1,但是使用()意味着即使列表不是从第1行开始,这个解决方案也可以工作。
    1. 在C2中,输入"= if (C1+1<=ROW($B$6),C1+1+INDEX($B$1:$B$6,C1+1),C1+1)“。"if“用于在索引到达列表末尾时停止生成#REF。
    2. 使用智能备份填充C3:C6。C1:C6的值应该是"1,2,4,5,7,8“

索引在D列中,创建新的唯一列表:

  1. 在D1中,输入"=IF(C1<=ROW($A$6),($A$1:$A$6,C1),"")“。而且,"if“用于在索引超出列表末尾时停止#REF情况。
    1. 使用智能备份填充D2:D6。
    2. D1:D6的值现在应该是“黑色”、“蓝色”、“绿色”、“红色”、"“、"”。

希望这能帮上忙。

票数 53
EN

Stack Overflow用户

发布于 2013-06-13 02:29:08

一种间接的方法是将Excel电子表格加载到Google电子表格中,使用Google独特的(范围)函数-它可以做您想做的事情-然后将Google电子表格保存回Excel格式。

我承认这对Excel用户来说不是一个可行的解决方案,但对于任何想要使用Google电子表格功能的人来说,这种方法都很有用。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1429899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档