我遇到的重复出现的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)),"")
缺点:缺点重复
有没有人有其他/更好的想法?
答案 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
。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而不是“”,请使用以下点击路径:
滚动到“显示此工作表的选项:”
如果要将值(与公式相对)从0更改为空白字符串,我也想提供一个简单的手动解决方案。此解决方案比“查找并替换”更好,因为它不会用11代替数字101。
如果正确使用了过滤器,其他数据将保留,如果出现问题,返回按钮将始终存在。我知道选项2是非常手动且“不优雅的”,但它确实将0成功转换为空白字符串,并且可以缓解不希望使用if语句的沮丧人士。
今天,我亲自学习了一些探索(非常干燥)excel问题的知识,并且我个人正在使用这些方法向前发展。如果对于中级excel用户来说这是一项常见的任务,则选项2的快速宏可能是一个不错的选择。