使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), " ", "")
我想通过连接一个EMPTY
string。
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))