为什么 UNIQUE 和 FILTER 的组合会区分实际数字零和从空单元格返回的零?

Vit*_*are 3 excel excel-formula

假设我们有 2 个单元格,一个包含零,另一个为空,请参A2:A3见图中的范围:

在此输入图像描述

如果它们通过了 a ,我们会得到两个零,请参见下图所示的inFILTER输出。当我们应用到存储先前结果的范围时,输出是单独的 0(参见 中的结果)。但是组合不会将这些零视为彼此相等,请参阅in的输出:FILTER(A2:A3, TRUE)B2:B3UNIQUEC2UNIQUE(FILTER(...))UNIQUE(FILTER(A2:A3,TRUE))D2:D3

在此输入图像描述

这是为什么?我们能否抑制这种行为并仅得到一个零作为组合结果?


ps 我使用 Office 365,Excel 版本 2108

Sco*_*ner 6

这是一个持续存在的问题,微软似乎选择继续下去。也就是说,它将真正的空白单元格视为0。因此,任何返回该值的公式都将返回 0。INDEX、(*)LOOKUP 或简单的数学函数都可以执行此操作。

正如您在尝试的最终公式中看到的那样,这似乎发生在最后一步。显然,FILTER 向 Unique 返回了一个空白,但是当它将值插入到工作表中时,它为空白返回了 0。

解决这个问题的一种方法是在后端连接一个空字符串,然后尝试将数字转回数字:

=LET(rng,A2:A3,uq,UNIQUE(FILTER(rng,TRUE)&""),IFERROR(--uq,uq))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


另一种选择是在过滤范围时测试范围并用空字符串替换空白:

=LET(rng,A2:A3,UNIQUE(FILTER(IF(rng="","",rng),TRUE)))
Run Code Online (Sandbox Code Playgroud)

哪个更短并且将保持数据类型。

在此输入图像描述


如果可以访问内部人员的BETA通道功能,TOCOL()则可以使用 的第二个参数在中间步骤中“过滤”掉空单元格(和/或错误):

=UNIQUE(FILTER(TOCOL(A2:A3,1),TRUE))
Run Code Online (Sandbox Code Playgroud)