Excel工作薄瘦身秘技
互联网 发布时间:2008-10-06 15:21:24 作者:佚名
我要评论
很多用户都遇到过Excel 文件在使用过程中不断增肥,反应越来越迟钝的现象,甚至发生文件损坏而丢失重要数据的可怕事件。如果是因为有大量数据的输入,那么文件体积增加也无可非议,此时应该通过优化表结构、把数据分散保存到多个工作簿文件的方法来减小单个文件的体积。
很多用户都遇到过Excel 文件在使用过程中不断增肥,反应越来越迟钝的现象,甚至发生文件损坏而丢失重要数据的可怕事件。如果是因为有大量数据的输入,那么文件体积增加也无可非议,此时应该通过优化表结构、把数据分散保存到多个工作簿文件的方法来减小单个文件的体积。然而,在很多时候,这些拥有“臃肿”身材的工作簿文件里面只有少量的数据,那么,它是怎么“肥”起来的呢?
本技巧中会罗列一些常见的Excel 文件体积虚增的原因及处理办法。
1 工作表中存在大量的细小图形对象
工作表中如果存在大量的细小图形对象,那么文件体积就可能在用户毫不知情的情况下暴增,这是一种很常见的“Excel 肥胖症”。可以使用下面两种方法来检查Excel 工作表是否存在这种症状。
(1)在工作表中按键调出“定位”对话框,单击“定位条件”按钮,在“定位条件”对话框中选择“对象”项,单击“确定”,如图1 所示。然后观察工作表上是否会显示很多被选定的对象。

如果工作簿中包含多个工作表,需要在每个工作表中用这种方法进行查找。关于“定位”功能的更多技巧,请参阅技巧28。
注意:隐藏列或行中的对象利用这种方法无法被看到。
(2)用VBA 对工作簿中的对象进行计数,查看在每个工作表中实际存在的对象数量,如果此数量不合理,就说明有问题。按打开VBA 编辑器窗口,单击菜单“插入”→“模块”来插入一个新模块,默认情况下为“模块1”,然后在模块1 的代码窗口中输入以下代码:
Sub CountShapes()
Dim n As Double
Dim ws As Worksheet
Dim Content As String
For Each ws In Worksheets
n = ws.Shapes.Count
Content = Content & "工作表" & ws.Name & " 有" & n & " 个对象" & vbCrLf
Next
MsgBox Content
End Sub
最后,按F5 键来运行这段代码,就能看到检查结果。在看似空白的工作表中,存在着大量的图形对象,如图2 所示。
误设单元格格式或者条件格式
如果确认在工作表中存在大量的对象,而用户并不需要它们,可以用两种方法来处理:
(1)刚才的定位方法中,当对象全部处于被选择状态时按键删除它们即可。
(2)使用宏在多个工作表中更加精确地删除这些无用对象。比如,可以根据需要只删除高度和宽度都小于14.25 磅(0.5 cm)的对象。
只删除活动工作表中特定大小的对象的代码为:
Sub DelShapes()
Dim sp As Shape, n
For Each sp In ActiveSheet.Shapes
If sp.Width < 14.25 And sp.Height < 14.25 Then
sp.Delete
n = n 1
End If
Next sp
MsgBox "共删除了" & n & "个对象"
End Sub
删除所有工作表中的特定大小的对象的代码为:
Sub DelAllShapes()
Dim ws As Worksheet
Dim sp As Shape
Dim n As Double
Dim Content As String
For Each ws In Worksheets
For Each sp In ws.Shapes
If sp.Width < 14.25 And sp.Height < 14.25 Then
sp.Delete
n = n 1
End If
Next
Content = Content & "工作表" & ws.Name & " 删除了" & n & " 个对象" & vbCrLf
n = 0
Next
MsgBox Content
End Sub
这些令人疑惑的对象的产生原因可能有以下几个。从网页上复制内容后直接粘贴到工作表中,而没有使用选择性粘贴。无意中使用绘图工具栏的直线工具或其他绘图工具,不知不觉中在工作表中插入了小的直线或其他图形对象,由于尺寸很小,于肉眼几乎无法看到。而后,又通过单元格的复制产生了大量的小绘图对象。在工作表中插入了图片或其他绘图对象,操作中又将其高度宽度设为0 或很小的值,通过复制产生了大量的对象。
在行或列的位置中插入了绘图对象,对象的属性为“大小位置随单元而变的(默认的)”,然后隐藏行或列,或设置行高或列宽为很小的值,从而使插入的对象不能看到。工作表中的对象设置了不可见属性(Visible=false),或对象的线条与填充色均设与背景色相同,使对象无法被看到。
2 工作表中在较大的区域内设置了单元格格式或者条件格式
仔细观察工作表滚动条,如果滑标很小,且拖动滑标向下到底,可以到达很大的行号或列标,可是工作表中实际使用到的区域很小,如图3 所示。这就说明,有相当大一块区域可能被设置了单元格格式或者条件格式,这些并没有被用到的单元格,能对文件体积产生很大的影响。
解决办法如下。单击到真正需要的行号的下一行,按组合键,选择所有的多余行(也可以在名称框中输入行号如2000∶65536),单击菜单“编辑”→“清除→“格式”(或全部)。同理,也可以清除多余列的格式。
有时,用户确实需要为工作表中空白的区域预设格式,以备将来增加数据之用,但一定要使用正确的方法,否则就会造成大量用不到的区域被预设了格式,徒增文件体积。
如果需要在一行或一列的很大范围设置统一的单元格格式,可以选择整行或整列设置单元格格式,而不要只选择行列的一部分单独设置格式。前者不会造成文件体积虚增的问题,而后者会增加文件体积。试验一下在两个Excel 文件里面分别对A1∶A65536 设置单元格格式和对A∶A 设置单元格格式,目的都是为A 列设置格式,但最终文件的体积相差100 倍以上。
本技巧中会罗列一些常见的Excel 文件体积虚增的原因及处理办法。
1 工作表中存在大量的细小图形对象
工作表中如果存在大量的细小图形对象,那么文件体积就可能在用户毫不知情的情况下暴增,这是一种很常见的“Excel 肥胖症”。可以使用下面两种方法来检查Excel 工作表是否存在这种症状。
(1)在工作表中按键调出“定位”对话框,单击“定位条件”按钮,在“定位条件”对话框中选择“对象”项,单击“确定”,如图1 所示。然后观察工作表上是否会显示很多被选定的对象。

如果工作簿中包含多个工作表,需要在每个工作表中用这种方法进行查找。关于“定位”功能的更多技巧,请参阅技巧28。
注意:隐藏列或行中的对象利用这种方法无法被看到。
(2)用VBA 对工作簿中的对象进行计数,查看在每个工作表中实际存在的对象数量,如果此数量不合理,就说明有问题。按打开VBA 编辑器窗口,单击菜单“插入”→“模块”来插入一个新模块,默认情况下为“模块1”,然后在模块1 的代码窗口中输入以下代码:
Sub CountShapes()
Dim n As Double
Dim ws As Worksheet
Dim Content As String
For Each ws In Worksheets
n = ws.Shapes.Count
Content = Content & "工作表" & ws.Name & " 有" & n & " 个对象" & vbCrLf
Next
MsgBox Content
End Sub
最后,按F5 键来运行这段代码,就能看到检查结果。在看似空白的工作表中,存在着大量的图形对象,如图2 所示。
误设单元格格式或者条件格式
如果确认在工作表中存在大量的对象,而用户并不需要它们,可以用两种方法来处理:
(1)刚才的定位方法中,当对象全部处于被选择状态时按键删除它们即可。
(2)使用宏在多个工作表中更加精确地删除这些无用对象。比如,可以根据需要只删除高度和宽度都小于14.25 磅(0.5 cm)的对象。
只删除活动工作表中特定大小的对象的代码为:
Sub DelShapes()
Dim sp As Shape, n
For Each sp In ActiveSheet.Shapes
If sp.Width < 14.25 And sp.Height < 14.25 Then
sp.Delete
n = n 1
End If
Next sp
MsgBox "共删除了" & n & "个对象"
End Sub
删除所有工作表中的特定大小的对象的代码为:
Sub DelAllShapes()
Dim ws As Worksheet
Dim sp As Shape
Dim n As Double
Dim Content As String
For Each ws In Worksheets
For Each sp In ws.Shapes
If sp.Width < 14.25 And sp.Height < 14.25 Then
sp.Delete
n = n 1
End If
Next
Content = Content & "工作表" & ws.Name & " 删除了" & n & " 个对象" & vbCrLf
n = 0
Next
MsgBox Content
End Sub
这些令人疑惑的对象的产生原因可能有以下几个。从网页上复制内容后直接粘贴到工作表中,而没有使用选择性粘贴。无意中使用绘图工具栏的直线工具或其他绘图工具,不知不觉中在工作表中插入了小的直线或其他图形对象,由于尺寸很小,于肉眼几乎无法看到。而后,又通过单元格的复制产生了大量的小绘图对象。在工作表中插入了图片或其他绘图对象,操作中又将其高度宽度设为0 或很小的值,通过复制产生了大量的对象。
在行或列的位置中插入了绘图对象,对象的属性为“大小位置随单元而变的(默认的)”,然后隐藏行或列,或设置行高或列宽为很小的值,从而使插入的对象不能看到。工作表中的对象设置了不可见属性(Visible=false),或对象的线条与填充色均设与背景色相同,使对象无法被看到。
2 工作表中在较大的区域内设置了单元格格式或者条件格式
仔细观察工作表滚动条,如果滑标很小,且拖动滑标向下到底,可以到达很大的行号或列标,可是工作表中实际使用到的区域很小,如图3 所示。这就说明,有相当大一块区域可能被设置了单元格格式或者条件格式,这些并没有被用到的单元格,能对文件体积产生很大的影响。
解决办法如下。单击到真正需要的行号的下一行,按组合键,选择所有的多余行(也可以在名称框中输入行号如2000∶65536),单击菜单“编辑”→“清除→“格式”(或全部)。同理,也可以清除多余列的格式。
有时,用户确实需要为工作表中空白的区域预设格式,以备将来增加数据之用,但一定要使用正确的方法,否则就会造成大量用不到的区域被预设了格式,徒增文件体积。
如果需要在一行或一列的很大范围设置统一的单元格格式,可以选择整行或整列设置单元格格式,而不要只选择行列的一部分单独设置格式。前者不会造成文件体积虚增的问题,而后者会增加文件体积。试验一下在两个Excel 文件里面分别对A1∶A65536 设置单元格格式和对A∶A 设置单元格格式,目的都是为A 列设置格式,但最终文件的体积相差100 倍以上。
相关文章

阳历/农历转换对照表怎么做? Excel制作日历表/万年历的最终版
想要制作阳历/农历转换对照表,,通过这个对照表,你只需知道阳历日期,就可以快速准确的找到对应的农历日期,下面我们就来看看详细制作方法2025-04-10
工作上需要制作一个日历表/万年历,该怎么制作呢?我们需要使用三个excel函数来实现,详细请看下文介绍2025-04-10
Excel中有一个功能非常强大的函数,它就是SUMPRODUCT函数,既能求和、计数、权重计算,还能排名等,今天我们就来看看Excel根据权重求和的技巧2025-04-10
tocol函数哪个版本能用? excel中tocol函数的两种高级用法
TOCOL函数公式非常强大,值得一学,从字面意义可以理解出来,它是将数据转换成一列的,今天分享TOCOL函数的2种高级用法2025-04-10
Excel隐藏行和折叠行有什么不同? 隐藏行和折叠使用方法和区别介绍
excel表格进行操作的时候,发现有隐藏和和折叠行,看上去效果一样,都隐藏了,但是两者是有很大区别的,详细请看下文介绍2025-03-21
Excel工龄计算不再愁! Excel隐藏函数DATEDIF轻松计算精确到天级的工龄
在日常工作中,我们经常需要计算员工的工龄,以便进行人事管理、薪资调整等工作,本文将详细介绍如何在Excel表格中计算工龄,并提供多种实用方法供您选择2025-03-13
Excel数据处理遇到的问题,99%都是由于奇葩的数据格式造成的,今天跟大家整理了几个Excel表格构建的规则,先不要问为什么,照着做就对了2025-03-06
Excel透视表1月到12月不能排序怎么办? 数据透视表日期无法排序解决方法
如图对数据透视表日期进行升序排序后,仍不是我们想要的结果,有可能月份是文本,不能排列,下面我们就来看看详细解决办法2025-03-06
首先咱们得明确一下账龄的概念,简单来说,账龄就是某个账户的余额从产生到现在的时间长度,比如,一年以内的账龄就是那些在过去一年内产生的债权或债务,下面我们就来看看2025-03-06
实现办公自动化! DeepSeek搭配Excel制作自定义按钮的技巧
DeepSeek生成想要的代码很方便,如果将生成的代码放到excel中作为vba代码使用,岂不是能实现办公自动化?下面我们就来看看实现方法2025-03-05



最新评论