来吧!带你玩转 Excel VBA


来吧!带你玩转 Excel VBA

 


来吧!带你玩转 Excel VBA
 
来吧!带你玩转 Excel VBA
 

 

从错失良机到艰辛的DOS征程,从坎坷购机自学路到转机起程,从爱好到事业,他从一个完全不懂电脑的人到VBA高级应用者,一切全是自学……

 

 

 

我是罗刚君,来自四川的一个小县城——资中县。

 

我是个地道的三无人员——无高等学历(初中毕业)、无突出特长、无显赫背景,所以19961月,当时才19岁的我就踏上了打工之路。

 

错失机遇

 

在打工生涯的前几年,一直在东莞市裕元鞋厂流水线上工作,无缘接触电脑,甚至曾有一段时间在心理上抵触电脑。

 

记得大概是1998 埗 年时,东莞市高 镇开始刮起了电脑风潮,满街的打字班、Office初级班、高级文秘班、绘图班等在大量招收学员。当时流水线上有较多同事都陆续报名打字班和Office初级班,少数同事开始学习CAD绘图和VB编程等课程。曾有一位已经学了两个月的同事劝我也报名学习电脑,还说电脑的熟练程度会大大影响未来找工作的成功率,而且对于我们这种一心想摆脱流水线的人群而言,电脑才是最好的出路。可惜当时我并没有接受同事的劝导,只抛下一句“你已经学完了,现在不也和我一样在流水线工作吗?”

 

现在想来,悔之晚矣!若当初听了同事的话,早8年学习Office软件,则早日实现个人目标。

 

1996年到2004年年初的8年间,我都在鞋厂的流水线和鞋材厂生产车间的注塑机上渡过,一直无法实现转入文职的愿望。

 

艰辛的 DOS 征程

 

在裕元鞋厂工作期间,厂里为约10万员工提供免费的厂报和杂志,厂报编辑部会每月向厂里的员工征稿。

 

工厂从1998年开始由12小时工作制转为8小时工作制,所以在流水线工作的我也每天拥有了大量的闲暇时间。为了消除无聊、打发时间,我每月向厂报投稿,陆续地发表了近百篇文稿,包括小小说、评论和诗歌等。因此,后来厂里的多个办公室内招文员时,我也获得了一些面试的机会,可惜的是每次都被最后一关挡下来——电脑打字测试。

 

碰壁多次后,我开始下定决心要恶补电脑技术。

 

当时的我手中并没有闲钱购书学习,月薪650元,需要邮寄600元回家,手里的50元包含了整月的一切开支。所以只能下班后去书店翻阅电脑书籍,将自认为有用的和感兴趣的知识点记在脑中,然后回到宣明会提供的免费电脑室上机练习。

 

最初,我最有兴趣的是DOS命令。当时电脑室并没有网络,更谈不上百度和Google了,所以常去书店翻看DOS教科书,记下三句命令后回到宣明会的电脑室练习。当掌握好当前三句命令后再去书店查阅同一本书,记下另三句命令后回到电脑室继续练习……如此周而复始。

 

由于电脑室每天开放的时间和机台都极其有限,而排队上机者众多,所以会经常记下了代码却没有电脑练习,导致简单的几十句DOS代码我用了一个多月的时间才掌握好。若在如今这种网络四通八达的环境下,可能只需几个小时就可以全部掌握这些命令的基本语法,熟悉它们的功能。

 

坎坷购机自学路

 

在学会DOS之后,我对电脑开始有了浓厚的兴趣,于是在工厂附近的“恒辉电脑培训班”报名学习Word,这是基于投稿写作的需要。

 

当时虽然报了Word班,其实没有上过一节Word课,每天下班后都去培训班一个人对着书和电脑自学,当时的李枝花老师曾经笑侃:“所有学生都像你这种方式学习,我开班就轻松多了”。其实我现在也庆幸当时养成了自学的习惯,虽然学习进度偏慢,但学得比较全面、系统,而且记忆很深刻。

 

在自学Word期间,可以听到旁边的Excel班老师的讲课内容。当时老师每天在讲的内容都与股票数据相关,设置单元格格式、排序、筛选、函数、数据透视表等无一不是在操作股票数据,所以我误以为Excel就是炒股票之用,毅然决定20天自学完Word后不再继续学习Excel。现在想来,培训班的Excel教材很可能是一位股票爱好者所写,所以书中的一切数据都与股票相关,不知道除我之外,是否还有其他人也被误导?

 

离开“恒辉电脑培训班”后,我于2000年底购买了属于自己的第一台电脑,在出租屋里自学电脑知识。当时是漫无目的地学习,今天Photoshop,明天AutoCAD,后天又PowerPoint。意外的是电脑才买了不到七天,出租屋被盗,电脑、手机都被人盗走,所以第一轮电脑学习道路就此终结。

 

虽然该机只是一台二手电脑,但却耗费了我足足半年的积蓄,无比伤感。

 

同时也感叹一下东莞市的治安环境,无以言表……

 

经过以上事件后,我只能再次回到宣明会的免费电脑室学习,期间也曾报了打字班学习五笔输入法。由于电脑培训是员工福利,所以听课和上机练习都免费。可惜的是上完10节课后,居然一分钟只能打8个字,还不能保证准确率在90%以上。

 

打字班毕业后,我在书店无意间发现《电脑报》中的内容很有趣,书中关于安装系统、解决疑难杂症的问答深深触动了我,所以我又开始在宣明会的免费电脑室里自学安装系统、维护系统、修改注册表和了解控制面板设置等相关知识。由于电脑室中的电脑皆装有自动还原软件,所以学习期间不曾让电脑留下后遗症。

 

半年后,我攒够了一台电脑的钱,又再次购买了一台二手电脑,打算进修一下PhotoshopAutoCAD。为了安全起见,我不得不搬到一栋新楼,从一位湖南的二手房东那里租得一个小单间,打算学成后可以换个工作,脱离流水线生活。

 

很悲剧的是,老天不曾降我大任,却一直不断地苦我心志、行拂乱我所为——在出租屋里自学仅半个月,电脑再次被盗。经过了解,二手房东于半夜光景盗和谐窃了整栋楼的所有晚班住户,十几家无一例外,房东用两个卡车拖走了盗和谐窃的物品,当然其中也包括我的电脑。

 

警察登记了所有人的失窃物品,只留下一句:“破案后会通知你们。”直到5年后我离开东莞去中山市工作时也没有得到任何通知。再次感叹一下东莞的治安……

 

转机

 

2004年后,经“熟人”介绍,我进了一家鞋材厂工作(给了1000多元感谢费),由于前面所言的“三无”状态仍未改善,所以到新厂后仍然只能在车间里做一名普通员工,开了一年注塑机,台湾人也称之为啤机。

 

由于在新厂里继续发表一些评论文章,且被厂长和主任所留意到,所以当办公室里需要一个厂长助理时,我获得了一个面试机会。

 

不过,和前面几次面试并没有分别,被最后一关挡在门外——当时厂长拿出一张车间每天使用的生产报表,让我在Excel中设计同等效果的表格。这本是极简单的工作,仅仅将纸上的文字录入到表格中,然后对表格添加边框、合并单元格之类,但是由于没有学过Excel软件,所以10分钟后也没完成任务。这次面试以失败告终。

 

不过,一个月后迎来了转机,办公室一直找不到合适的人选,厂长只能勉为其难地接受了我这个半罐水,让我一边工作一边学习。

 

在那段工作期间,我的职务是NOS小组成员,类似于ISO小组的工作。工作中用得最多的软件是PowerPoint,通过它制作会议报告,对Excel并没有涉猎太多。不过在业余时间我开始自学电脑硬件维修、自学FrontPage软件设计网站、自学远程控制以及动画相册等软件。

 

这些自学成果对当时的工作帮助不大,但丰富了生活和兴趣,同时为日后自学VBA和网络管理工作积累了很好的经验。

 

起程

 

2006年,我转入了广东省中山市的一家鞋材厂工作,在新厂中主持全厂的稽核、盘点、培训等工作。由于工作中需要大量使用Excel,所以在这段时间开始自学Excel,包括制表的基础知识、函数与公式、图表等技术。

 

20063月,办公室电脑终于可以登录外部网了,眼界顿时开阔不少,不再总是形单影只地独立学习,可以和外界的网友交流,学习进度相比以前一日千里。

 

200634日,第一次登录Excelhome论坛,找到了志同道合的网友们一同探讨Excel技术。

 

200636日,又注册了另一个当时国内最大的Office论坛——OfficeFans

 

在以上两个论坛中学会了Excel函数和图表,2006年底荣升OfficeFans论坛之图表区版主,20074月受ExcelHome论坛的邀请,成为ExcelHome论坛版主。以后的几年中,又陆续成为ExcelTip等其他五、六个论坛的版主。

 

至此,终于开始正式踏足Excel领域。

 

补充:在中山市工作期间,再次买了一台二手电脑,用于学习Excel。此电脑对我助益较大,为我以后的道路奠定了良好基础。可惜的是在中山市工作两年半后辗转回到东莞市另一家鞋材厂做网络管理,电脑在出租屋里再次被盗……

 

请问东莞市的公安局长们,东莞的治安问题比国足夺冠难多少?

 

自从2006年开始学习VBA后,VBA的趣味性吸引了我,以前下班后偶尔看小说、看电影、下象棋、投稿写作的爱好全都转移到了VBA之上。

 

前半年,我的业余时间一半用来学习函数,另一半用来学习VBA,之后则连续三个月专攻Excel VBA,几乎每天加班自学,把Excel VBA的帮助翻了个遍。

 

2006年,我还没有自己的QQ号,也不会使用QQ。现在想想,当时没有QQ对我学习VBA而言既有利又有弊,益处是没有QQ工具,就可以专心致志地学习VBA,不被外界打扰,更不会因QQ闲聊耽误学习进度和影响学习兴趣;弊处是没有QQ好友与我交流,无法获得需要的学习资料,影响学习进度。

 

Excel VBA的学习过程中,我开发了不少小型插件,发表在各大Office论坛中,逐渐扩大了个人影响力。

 

2007年年初,有电子工业出版社的编辑找我合作出书,经过近两个月的交流,未能达成共识,最终放弃。

 

也是在这一年,我学会了使用QQ软件,通过QQ认识了北京的一位在校大学生,她在VBA方面有所建树,与我常有技术交流,同时也感谢她将我介绍给了电子工业出版社的另一位编辑。

 

20077月左右,我开始和电子工业出版社合作出版我的第一本VBA著作《Excel VBA范例大全》。经过3个月加班加点的努力写作,连续90天没有休息一天,每天工作到23:00左右,终于在200710月完成了86万字、共585页的处女作。

 

此书经过编辑、排版、纠错、印刷等后期加工,于20083月正式上市。

 

从爱好到事业

 

学习VBA,是缘于本人对VBA的兴趣和爱好,工作中暂时不曾用到过。

 

不过当完成VBA处女作,对VBA的掌握更牢固、应用更熟练后,VBA的功效就自然地呈现出来。这也是我曾经对VBA学员讲过的——别问有没有用,你有几分耕耘?

 

很多知识皆如此,学得够好时它才能发挥效用,在学成之前,它确实可有可无。

 

例如,作为英语专业的学生翻译10句错3句,那么想靠英语谋生简直是异想天开,但若翻译10句正确10句时,英语将是你的护身符,同时也是找工作的敲门砖。

 

当完成第一部VBA著作后,爱好仍然是爱好,但同时也上升为事业,开始通过VBA养家,甚至几年后通过稿费在武汉买了一套住房。

 

 

 

VBA 有用吗

 

VBA是否有用?其优势如何体现?

 

这两个问题反复出现在论坛和QQ群中。

 

我想第一个问题已不需要回答,只要你看了前面的叙述,那么答案已经在你心中。

 

VBA的优势如何体现?这因人而异,就完全取决于用户的掌握程度和使用方式。对我而言,有太多太多的现实意义,除了前面说的写书外,还通过VBA开发商业插件,以及通过VBA大大简化工作。

 

说说我的两次亲身经历吧。

 

经历一是“VBA实现无人值守工作”。

 

大约六年前,我曾做过半年报表汇总工作,每天将前一天的品检部、生产部和生管部报表整理到一个工作簿中,然后分组统计,并生成图表和透视表发送给经理。以前的同事每天让三个部门的文员将报表发到邮箱中,然后打开三份报表并整理数据、生成总表,每天需要0.51小时。我接手该工作后,采用以下方式处理。

 

1  在服务器的共享磁盘中创建一个名为“明细”的文件夹,让三个部门的同事将每天完工的明细报表都按今天的日期命名并保存到该文件夹中。

 

2  在本地磁盘创建一个文件夹“模板”,其中存放一个用于汇总的模板工作簿,工作簿中采用VBA代码自动打开远程共享的明细文件,并按设定的流程全自动汇总报表,当“模板”文件夹中生成汇总表后将汇总结果自动复制一份到服务器中名为“总表”的共享文件夹中,文件以当天的日期命名。下图即为文件汇总流程与文件夹之间的关系示意图

 

3  通知经理从服务器共享文件夹“汇总表”中提取今日汇总的报表。

 

由于汇总表中的VBA代码设置为打开报表时自动执行,它会到指定的文件夹中检查是否存在需要汇总的三份报表,以日期文件名作为判断标准,如果不存在则产生提示框,然后自动关闭文件;

 

如果文件存在则自动汇总报表数据,完成后在本机保存一份汇总表,同时另存一份到共享文件夹“总表”中,一切工作全自动进行,需要执行的只有一步——双击打开本机中的总表模板。换言之,以往近1小时的工作现在只需要双击工作簿就完成了。

 

后来的某天,我因某些原因睡过了头,第二天早上9点多尚未起床,结果经理9:00开会时需要报表。当接通经理的电话后,我在电话中告知经理汇总表已经完成,自己有事在外,并请经理打开我的电脑,从D盘中打开汇总表模板查看即可。其实当经理打开该模板时,代码才开始运行,数秒钟后自动汇总完毕,并生成一个汇总表。

 

换言之,某些工作借助VBA可以实现无人值守,让代码全自动执行,从而解脱双手。

 

经历二是“3句代码让3小时工作变成3秒”。

 

有一次我去分公司处理电脑故障,看到办公室有个同事在制作一个生产报表。

 

下图是公司的产值表,表中需要计算的是每个员工生产的所有产品的数量乘以单价得到的产值。

 

要完成需求有三个难点:

 

l  每个员工生产的产品种类的数量不一致

 

l  产品数量和单价栏中包括单位名称且单位不一致

 

l  存放结果的单元格需要合并从而无法填充公式

 

我看到该同事在计算产值表时按上图中F列所示方式设计公式,不到5000行的数据每天需要花费35小时才能完成,而且计算结果的准确度也没有保障。

 

所以我为此报表写了一个自定义函数,只用了三句代码。完整代码如下:

 

Function Cal(rng1 As Range, rng2 As Range)

 

For i = 1 To Application.ThisCell.MergeArea.Rows.Count

 

Cal = Cal + Val(rng1.Offset(i - 1)) * Val(rng2.Offset(i - 1))

 

Next

 

End Function

 

 

 

调用代码的方法是选择F列第2行到工作表最后一个非空行的整个区域,然后在编辑栏中录入以下公式:

 

=cal(D2,E2)  

 

当按下组合键【Ctrl+Enter】后,选区中将自动填充所有公式。计算结果如下图所示。 

 

整个工作仅需3秒即可完成,而且计算结果100%准确。

 

 

 

作者:罗刚君

 

2013-6

 

——本段文字节选自《来吧!带你玩转 Excel VBA

 

<

你可能感兴趣的:(Excel)