Excel FILTER对于空白单元格返回0

问题描述

我怀疑以前曾问过这个问题,但找不到。

FILTER()通常会为空白行返回0,即使指定了返回字符串。

使用filter(),对于空单元格,我经常得到0的返回值。假设A列中有这6行数据:

abc
xyz
abc

xyz
abc

如果我使用

FILTER(A10:A15,A10:A15 <> "xyz","")

我有时会得到以下信息:

abc
abc
  0
abc

这似乎是不可预测的。在我不希望出现的位置显示0,是一个问题,需要额外的逻辑或过滤。这是一个已知的问题?除了显式滤除空白单元格外,还有另一种方法可以解决此问题?

这似乎可以消除空单元格返回的0:

FILTER(A10:A15,(A10:A15 <> "xyz") * (A10:A15 <> ""),"")

此返回:

abc
abc
abc

我可以接受这种解决方案,但它应该是不必要的。最后,我还将向我解释为什么要一遍又一遍地过滤空单元格。

顺便说一句,滤除0无效。 FILTER()似乎在读取该单元格时将其视为空白字符串,但在输出结果时却看不到。

FILTER(A10:A15,(A10:A15 <> "xyz") * (A10:A15 <> 0),"")

这将返回带有0的原始结果。

如果没有更好的解决方案,是否有解释?

解决方法

您可以在数组参数前添加 &""。

例如

FILTER(A10:A15 &"",(A10:A15 <> "xyz") * (A10:A15 <> ""),"")

这适用于文本值,但它会将您的数字数据转换为文本,在这种情况下,您可以使用 VALUE 函数将其转换回数字。

假设如果 A10:A15 是数字数据,您可以使用:

VALUE(FILTER(A10:A15 &"",(A10:A15 > 1000) * (A10:A15 <> ""),""))
,

here所述,第三个参数(If_empty)不适用于空格。

@State private var petSelection: Pet = .emptySelection

位置:
数组(必填)-您要过滤的值的范围或数组。
包含(必填)-作为布尔数组(TRUE和FALSE值)提供的条件。 其高度(当数据以列为单位时)或宽度(当数据以行为单位时)必须等于数组参数的高度。
If_empty (可选)-当没有条目符合条件时返回的值。

如果FILTER(array,include,[if_empty])中的所有值均为“ xyz”,则函数将返回If_empty中指定的字符串。也就是说,对于Array范围内的任何非空白值,Include中的条件都不会为TRUE。

此外,您的上一个公式似乎不再返回零:
filter does not return zeros

,

我想出了一个似乎不同的通用解决方案:将第一个参数中的空字符串替换为单引号,一般来说:

=FILTER(SUBSTITUTE($X:$Z,"","'"),*whatever*,*whatever*)

或者在这个问题的情况下:

=FILTER(SUBSTITUTE($A10:A15,A10:A15 <> "xyz","")

我只是利用 Excel 处理单引号的方式,我还没有发现任何缺点,虽然我没有彻底测试它。

,

另一种不太优雅的解决方案是用空格字符替换源数组中的空单元“”。

我在重新格式化数据时寻找快速答案时发现了这个线程。因此,添加空间比其他解决方案更快。我真的很喜欢那个 VALUE(过滤器(&"",也回答!