这个问题太讨厌了,不知你有没有遇到过——空单元格吗?不空怎么办?
只要方法对,一点也不累!
绝大部分Excel工作都很简单。根据我们的经验,绝大部分人的Excel工作都可以控制在每天5分钟之内。之所以还有很多人在Excel上花费太多时间,甚至需要天天加班,是因为没找到/不知道正确的方法。
这个正确的方法有时就是一个小技巧而已。
今天我们介绍的就是这样一种情况。
01
问题
有一天,某人遇到了这么一个问题。大概背景是这样的:
某人当时拿到了从数据库中导出的数据:每个门店的各项指标。然后需要给每个门店打分。每个门店要打几十个不同的项目分数,这些打分公式已经设计好了。其中很多公式用到了一个函数:
COUNTA。
计算很简单,只要将设计好的公式往下拖拽就好了。
某人一眼就发现了问题:结果不对。
简单来说(为了简单,就截取其中的一部分数据吧):
这个COUNTA的结果是90,从图上看明显就是错误的。
仔细检查那些空白单元格,没有发现任何问题:
从编辑栏上看,这个单元格是空的
用LEN函数来看,长度为0
用ISBLANK函数来看,发现了问题:这个单元格并不是空的。
所以,我们现在面临的情况是:
这些看上去是空白的单元格,实际上并不空。
处理也简单,选中这个“奇怪”的单元格,然后按Delete就可以了。
问题是怎么能够批量清空这些单元格呢?
02
徒劳无功的尝试
这个情况看上去很简单。但是处理起来却跟想象的不一样。
第一个想法是替换,
在查找内容框中什么也不输入,替换为中也保持为空,点击全部替换。
什么反应也没有。
在查找内容中输入:"",这是空字符串的标准输入方式,替换为继续保持为空:
点击全部替换,
什么也没有发生!
既然此路不通,试试定位怎么样?
选中整个区域,按Ctrl+G,调出定位对话框,选择定位条件,然后选中空值,
点击确定,
再次失败。
TRIM函数行吗?CLEAN呢?你试试看,不起作用!
各种方法都试过了,都不行。
怎么办?只能一个一个单元格删除了。有十几万行呢!!!
03
问题分析及解决
这实际上是Excel中的“零长字符串”问题,英文叫“zero length string”,简称zls。
实际上,我们经常使用这种字符串,比如,下面的公式:
=IF(A1>10,A1,"")
或者公式:
=IFERROR(VLOOKUP(B2,F2:G30,2,0),"")
都可能会返回"",这就是零长字符串。
当然,如果是公式产生的ZLS,选中单元格后,在编辑栏中可以看到公式。但是,如果我们通过复制-选择性粘贴-数值,将单元格从公式粘贴为数值后,就会出现某人遇到的情况:编辑栏中什么都没有,但是单元格非空。
除了公式外,还有其他方式也可以产生ZLS:
在单元格中输入:'。这种方式产生的ZLS在编辑栏中可以看到这个英文单引号,但是结果跟前面产生的方式一模一样。
从某些支持零长度字符串的数据库系统中导出到Excel。本文中某人遇到的就是这种情况。
当你遇到这种问题时,针对不同的场景,可以采用下面两种方法。
场景1 如果所有其他的明确有值的单元格中都是数字
就像本文中某人遇到的情况,
这里,所有非空的地方都是数字,其他地方我们要求应该为空。这时就简单了。
按Ctrl+G打开定位,点击定位条件,选择常量,勾选文本:
点击确定:
此时,所有应该为空的单元格全部选中。按Delete键,
可以看到,无论是COUNTA公式,还是ISBLANK公式,结果都正确了。
场景2 如果区域中有值的单元格不仅仅是数字,还有文本,就不能用这个方法了。
这时,你可以选中这片区域,
实际上,你可以选中整个工作表
然后按Alt+F11,进入VBA编辑器
缺省应该就是这种状态。如果你有多个文件打开,就在左边点击数据所在的文件,并且双击Thisworkbook,然后在右下角的立即窗口中输入下面的代码:
selection.value=selection.value
然后按回车执行这句代码,然后返回Excel:
结果正确了。
04
总结
在日常工作中,难免会遇到各种各样的问题,就像本文中的某人一样。这些问题一定会让你计划好的方法无法顺利执行,就像本例中的某人设计好的函数无法得到正确的结果。此时,一定有两个方法可以解决这个问题,一个是显而易见但是需要花费大量的时间,比如,每个单元格选中然后删除。另一个就是想本文后面介绍的这样的方法。你要做的就是,深吸一口气,然后调动你学过的Excel知识,找到类似于后一种的简单方法。如果你还找不到,就来到本公众号,可以在往期文章中搜索,也可以直接跟客服咨询。
还是那句话:
只要方法对,一点也不累!