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

问题描述 投票:0回答:6

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

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 的原始结果。

如果没有更好的解决办法,有解释吗?

excel filter worksheet-function is-empty excel-365
6个回答
6
投票

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

例如,

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

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

假设如果A10:A15是数值数据,你可以使用:

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

4
投票

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

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

或者对于这个问题:

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

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


2
投票

正如here所解释的,第三个参数(If_empty)不适用于有空格的情况。

FILTER(array, include, [if_empty])

地点:
Array(必需)- 要过滤的值的范围或数组。
Include(必需)- 作为布尔数组(TRUE 和 FALSE 值)提供的条件。 它的高度(当数据在列中时)或宽度(当数据在行中时)必须等于数组参数的高度。
If_empty(可选)- 当没有条目满足条件时返回的值。

如果

If_empty
中的所有值都是“xyz”,您的函数将返回
Array
中指定的字符串。即,对于
Include
范围内的任何非空白值,
Array
中的标准不会评估为 TRUE。

另外,你的最后一个公式似乎不再返回零:


0
投票

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

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


0
投票

尝试这个解决方案! =过滤器(IF(A10:A15="","",A10:A15),A10:A15<>"xyz")

仍在尝试找出其原理,同时它添加了与 1=1 类似的逻辑。


0
投票

对于数字数据,您可以这样做

如果(ISBLANK(过滤器(...)),“”,过滤器(...))

© www.soinside.com 2019 - 2024. All rights reserved.