我怀疑以前有人问过这个问题,但我找不到。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的原始结果。
如果没有更好的解决办法,有没有解释?
4条答案
按热度按时间8zzbczxx1#
您可以在数组参数前添加&"”。
例如,
这对于文本值很有效,但它会将数值数据转换为文本,在这种情况下,您可以使用VALUE函数将其转换回数值。
假设A10:A15是数值数据,您可以用途:
hof1towb2#
如here所述,第三个参数(If_empty)不适用于存在空白的情况。
FILTER(array, include, [if_empty])
其中:
数组(必需)-要过滤的值的范围或数组。
Include(必需)-以布尔数组形式提供的条件(TRUE和FALSE值)。其高度(当数据位于列中时)或宽度(当数据位于行中时)必须等于数组参数的高度或宽度。
If_empty(可选)-当没有条目符合条件时返回的值。
如果
Array
中的所有值均为“xyz”,则函数将返回If_empty
中指定的字符串。即,对于Array
范围内的任何非空值,Include
中的条件不会计算为TRUE。此外,上一个公式似乎不再返回零:
5n0oy7gb3#
我想出了一个似乎不同的通用解决方案:将第一个参数中的空字符串替换为单引号,一般来说:
或者在这个问题中:
我只是简单地利用Excel处理单引号的方式,我还没有发现任何缺点,尽管我没有彻底测试它。
ikfrs5lh4#
另一个不太优雅的解决方案是用空格字符““替换源数组中的空单元格。
我在重新格式化数据时寻找快速答案时发现了这个帖子。所以添加一个空格比其他解决方案更快。我真的很喜欢这个VALUE(FILTER(&"",答案也一样!