我怀疑以前有人问过这个问题,但我找不到它。
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 <> ""), ""))
我想出了一个不同的通用解决方案:将第一个参数中的空字符串替换为单引号,所以一般来说:
=FILTER(SUBSTITUTE($X:$Z,"","'"),*whatever*,*whatever*)
或者对于这个问题:
=FILTER(SUBSTITUTE($A10:A15,"","'"),A10:A15 <> "xyz", "")
我只是利用了Excel处理单引号的方式,虽然我没有彻底测试它,但我还没有发现任何缺点。
正如here所解释的,第三个参数(If_empty)不适用于有空格的情况。
FILTER(array, include, [if_empty])
地点:
Array(必需)- 要过滤的值的范围或数组。
Include(必需)- 作为布尔数组(TRUE 和 FALSE 值)提供的条件。
它的高度(当数据在列中时)或宽度(当数据在行中时)必须等于数组参数的高度。
If_empty(可选)- 当没有条目满足条件时返回的值。
如果
If_empty
中的所有值都是“xyz”,您的函数将返回 Array
中指定的字符串。即,对于 Include
范围内的任何非空白值,Array
中的标准不会评估为 TRUE。
另一个不太优雅的解决方案是用空格字符替换源数组中的空单元格“”。
我在重新格式化数据时寻找快速答案时发现了这个线程。因此添加空格比其他解决方案更快。我真的很喜欢那个 VALUE(FILTER( &"",也回答!
尝试这个解决方案! =过滤器(IF(A10:A15="","",A10:A15),A10:A15<>"xyz")
仍在尝试找出其原理,同时它添加了与 1=1 类似的逻辑。
对于数字数据,您可以这样做
如果(ISBLANK(过滤器(...)),“”,过滤器(...))