众所周知,Excel单元格里面的算式前面加等号(=)时将会对该单元格进行求值,如侈砉齿垃果没有等号则会以字符串的形式显示。如下图所示,要求解同一行上面B到E列的和叵萤茆暴(如:SUM(B2:E2)),直接使用求和公式,其结果为0,这又该如何处理呢?
工具/原料
计算机
Windows7
Excel2010
方法/步骤
1、既然算式前面加等号就可以计算,直接手动输入又比较麻烦,是否可以使用公式把等号加进去的呢,其实是行不通的。如:F2单元格输入公式="="&C2,到头来只是算式前面多了个等号,并没有算出结果。
2、既然步骤的方法行不通,那就改用VBA程序来处理。按下【Alt+F11】组合键调出VBA编辑器,或者依次点击【开发工具】、【VisualBasic】调出VBA编辑器。
3、在VBA编辑器的菜单栏上面点击【插入】、【模块】插入模块。
4、在模块的代码框里面输入以下VBA程序代码,然后按下【F5】键运行程序。SubSu瞢铍库祢anshiSum(像粜杵泳)Dimi1,i2,i3OnErrorResumeNext'忽略运行过程中可能出现的错误Application.ScreenUpdating=False'关闭屏幕更新,提高运行速度Setmysheet1=ThisWorkbook.Worksheets("Sheet1")'定义工作表Fori1=2To1000SetMyRange1=mysheet1.Range(mysheet1.Cells(i1,2),mysheet1.Cells(i1,5))'定义单元格区域SetMyRange2=mysheet1.Range(mysheet1.Cells(i1,7),mysheet1.Cells(i1,10))MyRange2.Value=""'清空单元格里面的内容i2=Application.WorksheetFunction.CountBlank(MyRange1)'统计空白单元格数量Ifi2<4Then'如果所在范围不全是空白,则Fori3=2To5mysheet1.Cells(i1,i3+5)="="&mysheet1.Cells(i1,i3)'在原单元格数值前面加=号Nextmysheet1.Cells(i1,1)=Application.WorksheetFunction.Sum(MyRange2)'求和EndIfMyRange2.Value=""NextApplication.ScreenUpdating=True'启用屏幕更新EndSub
5、VBA程序代码思路解读:(1)既然是引用到了工作表上面的单元格作为中介,就应当错聂庋堀保证该单元格区域没有数值,以免造成数据丢失;同时要关闭屏幕刷新,以提高程序的运行速度(主要是针对大数据计算,小锰栝骼郛范围计算可以忽略)。(2)“Application.WorksheetFunction.CountBlank(MyRange1)”主要是统计计算区域单元格的空白个数,再判断计算区域是否全为空白,如果全是空白,则忽略,以提高运算速度,减少没必要的计算。(3)VBA程序里面的mysheet1.Cells(i1,i3+5)="="&mysheet1.Cells(i1,i3),相当于是直接在算式前面加等号再赋到mysheet1.Cells(i1,i3+5)单元格里面,进而直接计算结果。(可以使用单引号屏蔽屏幕刷新程序后逐次按下【F8】键查看)
6、回到Excel工作表界面,将会看到计算结果。