12

我遇到的一个反复出现的 Excel 问题是公式,例如INDEX(array,row,column)在没有结果时返回 0,而不是返回空白。

将零结果更改为空白的最佳方法是什么?

以下是我迄今为止尝试过的方法:

1) 使用除以零。如果 INDEX 返回 0,我会导致错误,然后过滤掉。

=IFERROR(1/1/INDEX(A,B,C),"")

缺点:使公式更加混乱并隐藏您可能希望看到的错误。

2) 使用自定义格式

0;-0;;@

缺点:
1)不能同时应用日期格式
2)在检查空白单元格时它不适用于条件格式(仍然存在零值,只是没有显示)

3) 使用IF语句

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"")

缺点:混乱的重复

有没有人有任何其他/更好的想法?

4

14 回答 14

9

您可以在 Excel 中的模块中创建自己的用户定义函数,例如(从内存中,因此可能需要一些调试,并且 Excel 版本之间的语法也可能有所不同):

Public Function ZeroToBlank (x As Integer) As String
    If x = 0 then
        ZeroToBlank = ""
    Else
        ZeroToBlank = CStr(x)
    End If
End Function

然后,您可以简单地插入=ZeroToBlank (Index (a,b,c))您的单元格。

这里有一个关于这个主题的很好的教程。

基本步骤是:

  • 使用 .在 Excel 中打开 VB 编辑器Tools -> Macro -> Visual Basic Editor
  • 使用 . 创建一个新模块Insert -> Module
  • 将上述函数输入到该模块中。
  • 在您要调用该函数的单元格中,输入公式
         =ZeroToBlank (<<whatever>>)
    <<whatever>>如果它为零,您希望在其中使用空白的值。
  • 请注意,此函数返回一个字符串,因此,如果您希望它看起来像一个数字,您可能需要右对齐单元格。

请注意,根据您拥有的 Excel 版本,可能会有细微差异。我的 Excel 版本是 2002 版,虽然它已经很老了,但它仍然可以满足我的一切需求。

于 2013-03-06T05:24:08.760 回答
6

正常的方式是 IF 语句,虽然比你的例子更简单:

=IF(INDEX(a,b,c),INDEX(a,b,c),"")

无需对公式进行旋转,因为零值会触发错误条件。

于 2013-03-06T05:38:21.483 回答
4

?也许最简单的方法是使用修饰符将文本格式条件添加到公式中。因此:

(formula to grab values)变成:

text((formula to grab values),"?")

希望有帮助。

于 2014-03-18T01:44:02.920 回答
4

我不确定它是否适用于所有类型的数据,但我目前发现的唯一解决方案是测试索引是否返回空白:

=IF(ISBLANK(INDEX(a,b,c)),"",INDEX(a,b,c))

公式

=IF(INDEX(a,b,c),INDEX(a,b,c),"")

不适用于文本

于 2014-02-06T09:50:23.537 回答
2

If you’re willing to cause all zeroes in the worksheet to disappear, go into “Excel Options”, “Advanced” page, “Display options for this worksheet” section, and clear the “Show a zero in cells that have a zero value” checkbox.  (This is the navigation for Excel 2007; YMMV.)

Regarding your answer (2), you can save a couple of keystrokes by typing 0;-0; –– as far as I can tell, that’s equivalent to 0;-0;;@.  Conversely, if you want to be a little more general, you can use the format General;-General;.  No, that doesn’t automagically handle dates, but, as Barry points out, if you’re expecting a date value, you can use a format like d-mmm-yyyy;;.

于 2013-03-13T23:58:07.423 回答
1

问题可能是您为什么希望它的行为与现在不同?除了在 VBA 中编写自己的封装函数或替代函数(这可能会导致大文件的计算速度降低)之外,可能没有单一的解决方案可以解决您的不同问题。

任何后续公式很可能会因空白而失败,因此会导致错误,您将使用 捕获IFERROR()或防止错误IF(sourcecell<>"";...),如果您使用后者,那么测试零只是相同数量的工作和混乱。检查空白单元格变为检查 0 值单元格。(如果这对您不起作用,请更具体地解释问题所在)。

出于美学目的,自定义格式化解决方案就可以了。

对于图表,可能存在问题,实际上可以通过将其应用于原始公式来解决。

于 2013-03-14T12:11:25.937 回答
1
=if(b2 = "", "", b2)

这对我有用

于 2015-11-26T11:51:06.737 回答
1

这个凌乱的问题有一个非常简单的答案——SUBSTITUTE 函数。在上面的示例中:

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"")

可以改写如下:

=SUBSTITUTE((1/1/INDEX(A,B,C), " ", "")
于 2015-09-22T16:20:10.323 回答
1

我想通了,通过连接一个EMPTY字符串。

INDEX(tt_Attributes,MATCH([RowID],tt_Attributes[RowID],0),COLUMN(tt_Attributes[Long Description]) ) & ""
于 2015-11-05T15:11:36.540 回答
0

使用条件格式(主页选项卡,样式部分)并应用突出显示单元格规则(在等于框的单元格格式中输入 0),但选择自定义格式,然后选择数字选项卡。选择类别自定义并在类型框中输入:

0;-0;;@

听起来很复杂,但实际上很简单。

这样做的好处是单元格看起来是空的,但 0 仍然是基础值,因此您针对该单元格/选择使用的任何公式仍会将其视为数字,并节省大量使用链式 IF 语句的麻烦。

于 2016-06-09T02:28:18.367 回答
0

今天以上都不适合我,所以我尝试将 0 放在引号中,如下例所示。

示例:=IF(INDEX(a,b,c)="0","", INDEX(a,b,c))

于 2016-12-01T22:16:28.850 回答
0

只需在末尾附加一个空字符串。它迫使 Excel 看到它的本质。

例如:

=IFERROR(1/1/INDEX(A,B,C) & "","")
于 2018-07-18T18:49:20.630 回答
0

我最近注意到了这个问题,令人沮丧的是 excel 将空白字符串更改为 0。我认为公式不应该解决这个问题,因为向复杂公式添加更多逻辑可能很麻烦,甚至可能最终破坏原始公式. 我在下面有两个非公式选项。

如果要将公式保留在单元格中并让它们返回 0 而不是“”,请使用以下单击路径:

  1. 文件
  2. 选项
  3. 先进的

滚动到“此工作表的显示选项:”

  1. 取消选择“在具有零值的单元格中显示零”

如果您想将值(而不是公式)从 0 更改为空白字符串,我还想提供一个简单的手动解决方案。这个解决方案比查找和替换更好,因为它不会用 11 替换像 101 这样的数字。

  1. 选择所有数据
  2. 在数据选项卡上,单击过滤器徽标

过滤器徽标本身

  1. 单击具有不需要的 0(s) 的列的选择列表以仅选择值为“0”的行(确保仅清除包含具有确切值 0 的内容的单元格的内容!)

在此处输入图像描述

  1. 选择数据(只有0s),右键选择清除内容

如果您正确使用过滤器,其他数据将保留,如果出现问题,后退按钮始终存在。我了解选项 2 非常手动且“不雅”,但它确实成功地将 0 转换为空白字符串,并且可以减轻不想使用 if 语句的沮丧的人。

我个人今天学到了一些探索这个(非常枯燥的)excel问题的东西,我个人正在使用这些方法向前发展。如果这是中级 excel 用户的频繁任务,选项 2 的快速宏可能是一个不错的选择。

于 2020-07-02T05:50:55.417 回答
-1

=IF(INDEX(a,b,c)="0","", INDEX(a,b,c))稍作修改就为我工作。不包括引号之间的 0 和无空格: =IF(INDEX(a,b,c)="","", INDEX(a,b,c))

于 2017-05-05T15:10:14.127 回答