序
VBA,让效率飞起来
当加班成为常态,改变在所难免
十年前的我,加班是家常便饭的事,每天成堆的工作总是压得我喘不过气来,我和同事们就像一枚枚棋子,蜷缩在办公室里,在电脑前紧张地忙碌着,不知目睹了多少个华灯初上到灯火阑珊的夜晚。
2000年8月的一天我的目标是完成生产成本核算系统的最后一个报表模块的开发。有了它,就可以方便地查询和计算每一种产成品在任意一个工序上的成本明细项目,还可以在不同月份之间进行结转、对比。
我喜欢在晚上写程序,因为晚上安静,能让我的思路飞扬,让代码随着键盘声快速地推进,等待大功告成的那一刻出现。
你不会以为我是程序员吧?
不,事实上,我是财务部的成本主管。我就职于一家制造型企业,有IT部门,但是没有程序员。说白了,我就是千百万个成天和Excel表格“耳鬓厮磨”的一员。
我们公司的产品有几十种,涉及的材料有几千种,每个产品又有N道工序,每道工序由数量不等的作业人员进行生产。我的工作,就是计算和分析所有产成品和半成品的生产成本,包括材料、人工和杂费。计算依据主要包括生产部门提交的各产品工序的工时记录表,仓库提交的材料进销数据,HR部门提供的工资单明细。
这样的计算任务并不轻松,计算目标复杂,原始数据繁多,有些甚至不是电子文档,而且只有我一个人。再而且,时间非常紧张,因为每个月交报表的时间是固定的。
也许你想问,这么复杂的计算用Excel?你们公司难道没有ERP吗?
有的,而且声名不小,价格不菲。但在我看来,公司的ERP虽有一定的作用,不过却存在很多局限性,局部线条偏粗,又有些笨拙,很难给出我需要的结果。
所以,我必须借助Excel。
回想中学时的《政治》课本上说,资本家为了榨取更多的剩余价值,有两种方法:一是延长工作时间,二是提高生产效率。我现在清楚地认识到,为了及时准确地完成计算任务,方法同样有两个:加班,或者提高计算效率。
我当然不愿意加班。同时,加班的产出也是有限的,并不能解决任务重时间紧的根本性问题。
所以,我必须提高效率。
一次自动核算成本系统的开发经历,让我受益无穷
自从接了公司的生产成本核算系统这个活,我的Excel水平突飞猛进。从最初的焦头烂额,到现在的从容应对,我通过不断优化计算方法,完善成本核算模板,减轻工作量。
有人说,学好Excel可以以一当十。年轻的我凭着一腔热情,还真没有注意到:公司的产品规模在不断扩大,计算任务随之加重,我依然可以按时交报表。由于我舍得下力气去研究,直到后来协助工作的同事被上司调派去负责别的内容。
我的想法很简单,多做就是多学习,付出一定有回报。
我的成本核算模板,按产品区分,主要使用的是Excel的函数、公式和数据透视表,可以实现成本计算的半自动化——输入原始数据,结果自动生成。原始数据,一部分来源于上个月的成本数据,一部分从ERP中导出。
模板完善后,我的工作重心不再是计算,而是处理这样那样的原始数据。这是一件相当繁琐无聊的事情。导出、保存、打开、复制、粘贴、切换、关闭,奈何我200APM的手速,因为涉及几百个文件的数据处理,至少得一两天时间,处理过程中还很容易出错。
问题是,公司的产品数量一直在增加,并处于变化中,这让我再次想起了“水管工的故事”。
于是,我决定继续挖掘Excel的潜力,其实也是我自身的潜力。两个月以后,我用Excel VBA代码替代了80%的成本原始数据处理工作。只要按一次键,数据就能乖乖地按规定的路线在几百个Excel文件之间流转,就像欢乐的浪花在美丽的小河中荡漾。
说真的,没有什么事情,比看着自己写的代码正常运行,让复杂无比的工作灰飞烟灭的感觉更有成就感了。
了解到Excel VBA与众不同的威力后,我的激情再一次被点燃,我决定要自己写一个成本计算分析系统,我希望以后每个月的成本计算分析都是全自动的。经过持续不断地学习和研究,我想,今天晚上,终于可以达成了这一目标了。
透视VBA的知与行
转眼间迈入2012年了。
我们都生活在信息社会中,生活在一个前所未见的充斥着海量数据的年代。无论是企业还是个人,每天都要接触无数以数据为载体的信息。
数据,甚至已经成为了企业或个人的替代品。
不相信?
一家你未曾亲身到访甚至未曾接触过其产品的企业,对你来说意味着什么?它无非会成为财务报表或统计报表上的一堆林林总总的数据,诸如生产规模、员工人数、利润水平……
一个你未曾谋面未曾听说的人,对你来说意味着什么?就好像进入婚恋网站搜索对象,这些陌生人只不过是个人指标数据的集合体,诸如身高、体重、职业、收入……
想要在这样一个时代生存,处理数据的能力是必须的,因为实在有太多数据要处理了。广大Excel的用户,尤其是Excel的重度用户肯定对此深有体会。
作为Excel Home的站长和一名培训讲师,我接触过许多各式各样的数据处理要求,也体验或亲身参与过许多基于Excel的解决方案。这些宝贵经验让我对Excel提供的各项功能有更深的理解。
在Excel中制作计算模型,主力军非函数与公式莫属。300多个不同功能的函数在公式中灵活组合,可以创造无数种算法,再加上数组和名称的配合使用,几乎可以完成绝大多数计算任务。
要论数据分析和报表生成的便捷,不得不提到数据透视表,这是Excel最厉害的本领,厉害在于其功能强大的同时,使用起来却非常简单。
但如果只会这两样,仍然会有很多时候感到束手束脚,究其根本在于以下几方面。
1. 函数和公式只能在其所在的位置返回结果,而无法操作数据表格的任意位置,更不能操作表格的任意属性(比如设置单元格的填充色,或删除单元格)。
2. 函数和公式、数据透视表都需要规范的数据源,但往往我们工作量最大之处就在于获取和整理原始数据。比较麻烦的情况之一就是原始数据很可能是位于某个文件夹下的几十份表格。
3. 使用函数和公式、数据透视表制作的解决方案,难以具备良好的交互性能。因为它们只能存在于单元格中,与普通数据是处于同一个平面的。
4. 对于业务流程较为复杂、数据项经常变化的计算很难处理。
5. 无法迅速省力地完成大量的重复操作。
所以,永远不要忘记Excel还有一个杀手级的功能——VBA。
VBA是什么,怎么用,在本书中会给出详细的答案。这里,我只想说,只有这个功能才真正让Excel成为了无所不能的数据处理利器,才让我们有机会可以彻底地高效办公。
很多人认为VBA很神秘,认为会写代码是自己不可能实现的事情。虽然我不能保证人人都能学会VBA,但我可以保证如果你能学会函数和公式,你也能学会VBA,因为它们的本质是相同的。函数和公式无非是写在单元格中的一种简短代码罢了。
所以,如果你曾经觉得自己连Excel函数和公式也搞不定,现在却能熟练地一口气写下好几个函数嵌套的公式,那么你学VBA不会有问题。
在我眼里, VBA就好像“独孤九剑”。这武功最大的特点是遇强则强,遇弱则弱。如果你每天面对的数据非常有限,计算要求也很简单,那么用VBA就是高射炮打蚊子了。但如果你是Excel重度用户,经常需要处理大量数据,而Excel现有功能无法高效完成计算任务时,就可以考虑让VBA上场,一举定乾坤。
今时不同往日,互联网的发展使得技术和经验的分享非常方便。如果说十年前你想用VBA实现任何一个小功能都需要先掌握全部语法,然后一行一行代码自己写的话,那么现在Excel Home上有太多太多现成的实现不同目标的VBA代码,许多代码甚至已经到了拿来即用的程度。
所以,如果你的时间非常有限,也没有兴趣成为一个Excel开发者,你只需要快速地学习掌握Excel VBA的基本语法,然后到互联网上去淘代码来用到自己的工作中。如果你投入的时间多一点点,你会发现你很快就能看懂别人的代码,然后做出简单的修改后为自己所用。这个过程,是不是和你当年学Excel函数和公式的经历很类似?
等你做到这一步,你会发现原来公司里那个很厉害的会写代码的Excel高手的秘密武器原来是这样的啊,以后可以少请他吃饭以换取他为你写个小功能了……
因为工作的关系,我接触过很多信息化工具,也了解过一些编程语言,我发现所有工具的本质是相通的。每种工具都有其优缺点,有其专属的场合。这种专属并非指不可替代,而是说最佳选择。
因此,我不赞成VBA至上的观点,因为尽管VBA无所不能,但如果我们事事都写代码,那还要Excel本身的功能干嘛?我也反对VBA无用的观点,你暂时用不上怎么能说明此工具无用?甚至说,你根本就不会用这工具,怎么知道你用不上?
用VBA,是为了更高效。不用,也是因为同样的目的。
但是,会了VBA,你将拥有高效的更多种选择。不会,你就没有。这一点,高效人士都懂的。
Excel Home创始人、站长 周庆麟
2012年2月22日