让Excel公式返回0,使结果为空

时间:2013-03-06 05:13:38

标签: excel worksheet-function

我遇到的重复出现的Excel问题是INDEX(array,row,column)等公式,当没有结果时返回0,而不是返回空白。

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

以下是我到目前为止尝试过的方法:

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

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

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

2)使用自定义格式

0;-0;;@

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

3)使用IF语句

=IF((1/1/INDEX(A,B,C))<>"",(1/1/INDEX(A,B,C)),"")
缺点:缺点重复

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

13 个答案:

答案 0 :(得分: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))插入您的单元格即可。

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

基本步骤是:

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

请注意,根据您拥有的Excel版本,可能会有微小的变化。我的Excel版本是2002年,虽然它已经很老了,但它仍然可以完成我需要的所有东西。

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:4)

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

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

公式

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

不适用于文字

答案 3 :(得分:4)

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

(formula to grab values)变为:

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

希望有所帮助。

答案 4 :(得分:2)

如果您愿意使工作表中的所有零都消失,请进入“Excel选项”,“高级”页面,“显示此工作表的选项”部分,并清除“在包含的单元格中显示零”零值“复选框。 (这是Excel 2007的导航; YMMV。)

关于你的答案(2),你可以输入0;-0;来保存几个击键 - 据我所知,这相当于0;-0;;@。相反,如果您想要更一般,可以使用格式General;-General;。不,这不会自动处理日期,但是,正如Barry所指出的,如果您期待日期值,则可以使用d-mmm-yyyy;;之类的格式。

答案 5 :(得分:1)

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

任何后续公式都很可能会因空白而失败,从而导致您使用IFERROR()捕获或由IF(sourcecell<>"";...)阻止的错误,如果您使用后者然后测试零则只是相同数量的工作和杂乱。检查空白单元格将检查0值单元格。 (如果这项工作对您有用,请详细说明问题所在。)

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

对于图表,可能存在一个问题,这可以通过在原始公式中应用它来解决。

答案 6 :(得分:1)

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

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

可以改写如下:

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

答案 7 :(得分:1)

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

INDEX(tt_Attributes,MATCH([RowID],tt_Attributes[RowID],0),COLUMN(tt_Attributes[Long Description]) ) & ""

答案 8 :(得分:1)

=if(b2 = "", "", b2)

这对我有用

答案 9 :(得分:0)

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

0; -0 ;; @

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

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

答案 10 :(得分:0)

以上都没有为我工作,所以我尝试将0放在引号中,如下例所示。

实施例: = IF(INDEX(a,b,c)=“0”,“”,INDEX(a,b,c))

答案 11 :(得分:0)

只需在末尾附加一个空字符串。它强制Excel对其进行查看。

例如:

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

答案 12 :(得分:0)

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

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

  1. 文件
  2. 选项
  3. 高级

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

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

如果要将(与公式相对)从0更改为空白字符串,我也想提供一个简单的手动解决方案。此解决方案比“查找并替换”更好,因为它不会用11代替数字101。

  1. 选择所有数据
  2. 在数据标签上,点击过滤器徽标

The Filter Logo itself

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

enter image description here

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

如果正确使用了过滤器,其他数据将保留,如果出现问题,返回按钮将始终存在。我知道选项2是非常手动且“不优雅的”,但它确实将0成功转换为空白字符串,并且可以缓解不希望使用if语句的沮丧人士。

今天,我亲自学习了一些探索(非常干燥)excel问题的知识,并且我个人正在使用这些方法向前发展。如果对于中级excel用户来说这是一项常见的任务,则选项2的快速宏可能是一个不错的选择。