Excel技巧8|你的工作簿突然莫名变大,原因可能在这里

今天有个朋友在QQ上呼我,说老大帮忙看看呗,我的文件突然间很奇怪就变得莫名地大。我心想,能有多大?无非几十兆呗,结果她说都快100M了,一个Excel文件啊,记忆中我曾经服务过的成百上千的客户中拿Excel当数据库用的那size也才70+M吧。我想起来了工作上自己team之前用过的表,才10几M,那速度卡滞就让人受不了,100M该是多么地抓狂。

远程连接了过去看了一下,整个workbook也就几个sheet而已,每个sheet里面数据也不多。于是乎我就ctrl+end试了下,发现了玄机,有几个sheet里面数据顶多百把行,但是ctrl+end定位后单元格却定位到了6万多行的地方,列标也很大,中间大片的空域其实是“空白”的。这里空白打引号是有讲究的。

我想很多人在平时的工作学习中遇到过类似的问题,明明数据不多,工作簿size却不小,严重的影响了运行和使用效率。ExcelHome技术论坛上有个老帖子,跨度了几年了,说的就是Excel 数据只有几十行,ctrl+end却到了数千行?

有的人可能好奇,你按ctrl+end表示什么意思啊?

这个是快捷键,快速定位到excel已使用单元格的最后一个单元格。“已使用”区域这个定义微软说得比较模糊,所以很多人理解起来有困难。讲到这里,我们不妨用VBA的角度来讲解,可能会更好理解。

VBA里面有两个概念,一个叫做UsedRange,一个叫做CurrentRegion。意思很好理解,完全可以望文生义直译过来。

后者比较好理解,比如你鼠标选中某个有内容的单元格,那么CurrentRegion表示有数据的区域最右边以及最下面以空列或者空行为分隔界限的这么一个区域,对应的操作其实就是相当于ctrl+A。

UsedRange属性返回工作表中所有已使用范围的单元格区域,而不管该区域数据间是否有空行或空格。特别注意:UsedRange属性返回工作表中所有已使用范围的单元格区域是指:单元格中有数值、公式、单元格格式化设置(例如:单元格字体设置、边框设置等等)

也就是说即使你原先设置了后来删除了或者还原了,那么Excel的记忆还在,它依然会把它当做是已使用单元格区域。

试想,你本来几十行或者上百行的,一下子到了几万行,虽然肉眼你看不到(excel里存在很多真空、假空的现象,所以眼见未必为实!)但是确实占据了空间,反应在物理内存上就会导致excel工作簿size变大,而你半天还找不到原因?

可见这个问题困扰了很多人。有位仁兄丢下下面这句代码,被一众小白菜鸟奉为神贴在那膜拜点赞。我也是呵呵哒,这就是弹出个对话框显示一个单元格地址而已,啥都没发生,强大在哪里?

  1. Sub dd()

  2. MsgBox ActiveSheet.UsedRange.Address

  3. End Sub

那怎么办?难道要一个个的去甄别么?除了确实可能的一些非可见打印字符或者你一时半会儿还无法完全判断的设置外,你如果很确定你的数据区域的范围的话,那么我们可以简单的按照以下方式处理:

将Ctrl+End到达范围内的空白单元格都选中(如何选中?ctrl+shift+向右/向下方向键即可),执行“编辑菜单→清除→全部”,必须还要保存一下,然后再按Ctrl+End就能真正到达最后一个非空单元格了。

编辑过的地方,如果设置了格式、批注等,就算删除了单元格内容,Ctrl+End还是有可能到空白单元格。因为用Del键删除只相当于执行了“编辑→清除→内容”。

所以还有些名堂你是删不掉的啦,它就像黑暗中的萤火虫,那样的鲜明,那样的出众,它那忧郁的颜色,唏嘘的底纹,神乎奇迹的批注,还有那些单元格格式都深深的出卖了它。但是不管怎么说,它还是能清除格式和批注等等啊,谁不想用Ctrl+End到达最后一个非空单元格啊!

有的人说复制粘贴看得见的数据到新表,这个是毋庸置疑的肯定有效,就是有时候略嫌麻烦。

本身excel文件size突然变大这个问题属于一个比较复杂的问题,我们有时候很难说清楚到底发生了什么,以我个人经验的话,如果电脑上混装不同版本的excel的,比如03版和07或者更高的版本都安装了,或者交叉打开不同的版本,有时候就会发生一些莫名其妙的错误,曾经在网上遍寻答案,也没有找到满意的,只能解释为兼容性的问题,算你走火碰上了倒霉吧。

------------------分割线-----------------

(0)

相关推荐