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

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

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

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

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

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

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

2)使用自定义格式

 0;-0;;@ 

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

3)使用IF语句

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

缺点:凌乱的重复

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

您可以在Excel中的一个模块中创build自己的用户定义函数,例如(从内存中,所以可能需要一些debugging,并且在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))

这里有一个很好的教程。

基本步骤是:

  • 使用Tools -> Macro -> Visual Basic Editor器在Excel中打开VB编辑Tools -> Macro -> Visual Basic Editor
  • 使用“ Insert -> Module创build一个新模块。
  • 将上述functioninput到该模块中。
  • 在要调用该函数的单元格中,input公式
    =ZeroToBlank (<<whatever>>)
    其中<<whatever>>是您希望使用空白的值,如果它是零。
  • 请注意,这个函数返回一个string,如果你想让它看起来像一个数字,你可能想右alignment的单元格。

请注意,根据您拥有的Excel版本,可能会有细微的变化。 我的Excel版本是2002年,这确实是相当古老,但它仍然做我所需要的一切。

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

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

不需要用公式做回转,因为零值会触发错误的情况。

我不知道它适用于所有types的数据,但我目前find的唯一解决scheme是testing索引是否返回空白:

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

公式

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

不适用于文本

也许最简单的方法是将文本格式条件添加到公式中, 修改。 从而:

(formula to grab values)变成:

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

希望有所帮助。

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

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

这个问题可能是为什么你想要它现在的行为有所不同呢? 除了在VBA中编写自己的包络函数或替代函数(这可能会导致大文件中的计算速度降低)之外,可能不会有针对您的不同问题的单一解决scheme。

任何后续的公式将最有可能失败一个空白,从而导致一个错误,你可以捕捉IFERROR()IF(sourcecell<>"";...) ,如果你要使用后者,然后testing零是一样的工作和混乱的数量。 检查空白单元格将检查0值单元格。 (如果这可以解决你的问题,请解释一下更具体的问题)。

为了美观的目的,自定义格式解决scheme将会很好。

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

这个混乱的问题有一个非常简单的答案 – SUBSTITUTEfunction。 在你上面的例子中:

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

可以改写如下:

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

我想通过连接一个EMPTYstring。

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

这对我有效

使用条件格式(主页选项卡,样式部分),并应用突出显示单元格规则(将0格式化为与框格相同的单元格),但select自定义格式,然后select数字选项卡。 select类别自定义,并在types框中input:

0; -0 ;; @

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

这样做的好处是单元格看起来是空的,但是0仍然是底层的值,所以你使用的那个单元格/select的公式仍然可以看作是数字,并且节省了大量的链接IF语句。

以上都没有为我今天工作,所以我试图把0引号,如下面的例子所示。

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

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