有时候我们希望将已做好的表格拷贝给别人,但是这个表格中很多地方都设置了公式(包含了对别的工作表数据的引用等),如果直接将此工作表发送给别人,那么将会导致工作表的错误,那么如何生成一个仅有最终数据的表直接给别人呢?
一种解决的方法是复制整份工作表,然后再进行“选择性粘贴\粘贴数值”,这样可以去掉工作表中公式,仅保留值的目的,但是,存在的问题是破坏了原来的数据格式,如果原来的工作表数据量比较大,那么重新设置格式会非常的费时费力;另外,这样的工作是一项重复性工作,这次完成了,下次还得继续做。那么,有没有更好的办法呢,其实使用Excel中内置的VBA宏,可以轻松解决,仅仅是几行代码的事情。 假设有如下一份Excel示例工作表,表中包含有计算公式、函数调用。
下面我们创建一个宏,实现去除工作表中的公式,保留计算结果。宏编写的基本思路是:遍历指定工作表中所有已使用的每一个单元格,对单元格进行判别:该单元格是否包含有公式,若是公式,则用该单元格的计算值取代公式;思路非常直观,算法也非常简单。按Alt+F11组合键进入到Excel的VBA编辑窗口,然后单击【插入\模块】菜单项,进入到VBA通用模块编辑窗口,然后输入如下图所示的VBA代码。
这里编制了一个名为RemoveFormulas的VBA子程序(宏),用For each-Next循环遍历当前工作表中已使用的每一个单元格(UsedRange表示已使用区域),然后通过单元格的HasFormula属性判断是否包含公式,若值为True,则将该单元格的值设置为它的数值(Value或Text)。 返回工作表窗口,为了保留原工作表,原样复制一份工作表,然后单击【开发工具】选项卡【代码】组中的【宏】命令,在弹出的【宏】对话框中选择RemoveFormulas宏,然后单击执行,系统将调用宏代码并自动执行。
可以看到,工作表中的所有公式都改成了计算结果,同时保留工作表的格式不变。
这里要注意的是:为了保留已创建的宏代码,应将工作簿另存为.xlsm格式文件(Excel启用宏的工作簿),下面给出宏的代码文本(可复制)。
Sub RemoveFormulas()'去除公式,仅保留值Dim ws As Worksheet Dim rng As Range ' 设置工作表对象 Set ws = ActiveSheet ' 禁用屏幕更新和警告信息 Application.ScreenUpdating = False Application.DisplayAlerts = False ' 遍历工作表中的每一个单元格 For Each rng In ws.UsedRange ' 如果单元格包含公式,则将公式结果赋值给单元格 If rng.HasFormula Then rng.Value = rng.Text ' rng.Value End If Next ' 重新启用屏幕更新和警告信息 Application.ScreenUpdating = True Application.DisplayAlerts = True ' 清理对象变量 Set rng = Nothing Set ws = Nothing ' 宏执行完毕的消息 MsgBox "所有公式已转换为它们的值。", vbInformation + vbOKOnly, "提示"End Sub我是鉴水鱼老师,关注我,持续分享更多的Excel知识与操作技巧。