问题描述
我怀疑以前曾问过这个问题,但找不到。
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(SUBSTITUTE($X:$Z,"","'"),*whatever*,*whatever*)
或者在这个问题的情况下:
=FILTER(SUBSTITUTE($A10:A15,A10:A15 <> "xyz","")
我只是利用 Excel 处理单引号的方式,我还没有发现任何缺点,虽然我没有彻底测试它。
,另一种不太优雅的解决方案是用空格字符替换源数组中的空单元“”。
我在重新格式化数据时寻找快速答案时发现了这个线程。因此,添加空间比其他解决方案更快。我真的很喜欢那个 VALUE(过滤器(&"",也回答!