1

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

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

4 回答 4

3

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

例如,

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

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

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

VALUE(FILTER(A10:A15 &"", (A10:A15 > 1000) * (A10:A15 <> ""), ""))
于 2021-04-10T10:17:11.807 回答
1

如此处所述,第三个参数 (If_empty) 不适用于有空白的情况。

FILTER(array, include, [if_empty])

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

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

此外,您的最后一个公式似乎不再返回零:
过滤器不返回零

于 2020-12-07T15:21:02.737 回答
0

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

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

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

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

我只是利用 Excel 如何处理单引号,我还没有发现任何缺点,尽管我没有彻底测试它。

于 2021-05-17T09:44:20.197 回答
0

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

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

于 2021-06-03T13:54:00.060 回答