为什么 UNIQUE 和 FILTER 的组合会区分实际数字零和空单元格返回的零?
Why does the composition of UNIQUE and FILTER distinguish between the actual number zero and the zero returned from empty cells?
假设我们有2个单元格,一个为0,一个为空,如图A2:A3
范围:
如果他们通过 FILTER
,我们会得到两个零,请参见下图中 B2:B3
中 FILTER(A2:A3, TRUE)
的输出。当我们将 UNIQUE
应用于存储先前结果的范围时,输出是唯一的 0 (请参阅 C2
中的结果)。但是组合 UNIQUE(FILTER(...))
不会将这些零视为彼此相等,请参阅 D2:D3
中 UNIQUE(FILTER(A2:A3,TRUE))
的输出:
这是为什么?我们能否抑制这种行为,并作为组合的结果只得到一个零?
p.s。我使用 Office 365,Excel 版本 2108
这是一个持续存在的问题,Microsoft 似乎选择继续处理。也就是说,它将真正的空白单元格视为 0
。因此,任何 return 的公式都会 return 0。INDEX、(*)LOOKUP 或简单的数学函数都可以做到这一点。
这似乎发生在最后一步,正如您在尝试的最终公式中看到的那样。 FILTER 显然 return 为 Unique 输入了一个空白,但是当它将值插入到工作表中时,它 return 为空白输入了 0。
解决这个问题的一种方法是在后端连接一个空字符串,然后尝试将数字转回数字:
=LET(rng,A2:A3,uq,UNIQUE(FILTER(rng,TRUE)&""),IFERROR(--uq,uq))
另一种选择是在过滤时测试范围并用空字符串替换空白:
=LET(rng,A2:A3,UNIQUE(FILTER(IF(rng="","",rng),TRUE)))
哪个更短,将保持数据类型。
如果可以访问内部人员的 BETA-channel 功能,TOCOL()
的第二个参数可用于在中间步骤中“过滤”空单元格(and/or 错误) :
=UNIQUE(FILTER(TOCOL(A2:A3,1),TRUE))
下面 E2 中的公式因 OP 中的缺席而引人注目,它表现出与查询 D2 的公式相同的行为:
VBA 深入了解 Excel 的计算引擎,因为它始终区分空单元格和文字 0:如果引擎读取 2 种数据类型,那么在这种情况下,它不会 return 少于 2 个结果,即使 'by Microsoft convention' 它们都被 return 编辑为 0(C2 中的公式引用引擎认为仅包含一个范围单一数据类型(参见散列变量),因此 return 只是一个单一的 0;F2 中的公式表明,将 Excel 变为 return 真正空白单元格的唯一明显方法是传递空字符串 作为数组常量的一部分 ).
假设我们有2个单元格,一个为0,一个为空,如图A2:A3
范围:
如果他们通过 FILTER
,我们会得到两个零,请参见下图中 B2:B3
中 FILTER(A2:A3, TRUE)
的输出。当我们将 UNIQUE
应用于存储先前结果的范围时,输出是唯一的 0 (请参阅 C2
中的结果)。但是组合 UNIQUE(FILTER(...))
不会将这些零视为彼此相等,请参阅 D2:D3
中 UNIQUE(FILTER(A2:A3,TRUE))
的输出:
这是为什么?我们能否抑制这种行为,并作为组合的结果只得到一个零?
p.s。我使用 Office 365,Excel 版本 2108
这是一个持续存在的问题,Microsoft 似乎选择继续处理。也就是说,它将真正的空白单元格视为 0
。因此,任何 return 的公式都会 return 0。INDEX、(*)LOOKUP 或简单的数学函数都可以做到这一点。
这似乎发生在最后一步,正如您在尝试的最终公式中看到的那样。 FILTER 显然 return 为 Unique 输入了一个空白,但是当它将值插入到工作表中时,它 return 为空白输入了 0。
解决这个问题的一种方法是在后端连接一个空字符串,然后尝试将数字转回数字:
=LET(rng,A2:A3,uq,UNIQUE(FILTER(rng,TRUE)&""),IFERROR(--uq,uq))
另一种选择是在过滤时测试范围并用空字符串替换空白:
=LET(rng,A2:A3,UNIQUE(FILTER(IF(rng="","",rng),TRUE)))
哪个更短,将保持数据类型。
如果可以访问内部人员的 BETA-channel 功能,TOCOL()
的第二个参数可用于在中间步骤中“过滤”空单元格(and/or 错误) :
=UNIQUE(FILTER(TOCOL(A2:A3,1),TRUE))
下面 E2 中的公式因 OP 中的缺席而引人注目,它表现出与查询 D2 的公式相同的行为:
VBA 深入了解 Excel 的计算引擎,因为它始终区分空单元格和文字 0:如果引擎读取 2 种数据类型,那么在这种情况下,它不会 return 少于 2 个结果,即使 'by Microsoft convention' 它们都被 return 编辑为 0(C2 中的公式引用引擎认为仅包含一个范围单一数据类型(参见散列变量),因此 return 只是一个单一的 0;F2 中的公式表明,将 Excel 变为 return 真正空白单元格的唯一明显方法是传递空字符串 作为数组常量的一部分 ).