日报标题:Excel 里这个你可能没太用过的功能,其实是办公利器

先说结论,VBA 依旧是办公利器。以我的个人经历而言,在 BCG 做过三年咨询顾问,写了上万行的 VBA 程序,每个项目一千至几千行程序不等。最后将 Excel 用成了中控界面,类似 Emacs,在 Excel 可以随意操控全公司的打印机、Word、Powerpoint 等等,自动完成各种任务以及数据更新和抓取。依靠 VBA,在效率上是一般同事的数倍甚至是高一个量级,你说 VBA 还是不是办公利器?
不过题主得到的反馈也正常,许多高级程序员确实瞧不上 VBA。因为程序员是有鄙视链的:汇编 > C > C++ > Python > Java 及 C# 及 PHP(这三者相互撕) > VB > HTML。在这长长的鄙视链中,甚至都没有 VBA 的位置。
但是 Office+VBA 是图灵完备的,所以被程序员用来耍酷的各类性感语言能实现的大部分功能,VBA 都能实现,而且往往是以更高效更快捷的方式,在这里不谈效率和优雅。较之 Python 等常用语言,VBA 各有攻防各有优缺点。Python 的优势当然是扩展性强、超越 Office 环境之后的适用性强、资源丰富以及效率高,而 VBA 的优点如下:
- 环境不依赖,只需要打开装机自带的 Office,然后按下 Alt+F11 就自动进入编程和执行环境
- 上手简单,学习曲线很平缓,甚至可以更简单的通过录制宏来解决写程序的问题,只需要在简单的代码基础上修修补补就可以执行,参考 Excel VBA 如何快速学习? - 何明科的回答
- 与办公环境完美兼容,在 Excel/Word/Powerpoint/Outlook/Access 之间随便穿梭,比胶水语言还要简单易用
- 分享性和移植性很强,几乎所有测试通过的程序放到别的机器上也可轻易执行(如果不考虑各种本地文件位置)
基于以上的优劣势对比,VBA 仍然是当之无愧的办公利器之王。而且大家不用太在乎手中的工具(VBA 还是 Python 或者其他),核心还是使用工具的人以及人的思考。
下面列举 Office+VBA 实现的若干功能,真正为职场人士省时省事省力。大部分内容在回答(Excel 到底有多厉害? - 何明科的回答)中已经出现过。不愿意点击过去阅读的,直接看下面的克隆内容。
1、批量修改格式
下图是利用 Powerpoint 中录制的宏再加上稍微修改的代码(甚至都称不上是改代码,大部分是改参数),将 Powerpoint 中所有的字体及字号进行统一修改。常做 PPT 而且需要根据老板的喜好改来改去的同学们,知道这个批处理功能有多么救命。
2、批量完成打印
刚进职场的新人,只要爸爸不是李刚,基本都做过影帝影后(影=印,各种复印打印的体力劳动)。特别是咨询投行服务行业,在大忽悠会议之前之后,花数小时或者整晚来打印数个文件,并不是天方夜谭。而且这件事情是对着同样一堆不断修改的文件,会经常不断重复发生。
我写的第一个 VBA 程序就是完成对 100 多张 Excel 表格的自动打印,因为是第一个 VBA 程序,所以比较挫,基本上是宏录制之后来改的,没有使用参考书及搜索引擎,全靠 F1 和自动提示,所以贴出来特别纪念一下。但也让大家清楚 VBA 上手也多么容易。实现的功能就是将每周都要做一次的 100 多张表格的按顺序打印让机器自动做一遍,而且需要防卡纸:按下一个“妞”,就慢慢美妙结果的发生。后来这个程序的升级版是:调度多台打印机,进一步提高效率,以及将打印机卡纸造成队列错误的概率降到极小的范围内。
3、制作炫目视觉效果(图表、动画及油画)
图表制作是每个 Office 一族的必备任务,制得一手好表格,绝对是升职加薪和偷懒放风的利器。在回答(黄焖鸡米饭是怎么火起来的? - 何明科的回答),就利用 Excel+VBA 做出数张炫酷的信息地图,利用 VBA 为每个省的图形涂色。(涂色部分来自于网上的一段程序,制作 GIF 动画的是自己完成的)
同时,为了进一步增强炫酷结果,还利用 VBA 将这些连续变化的图表做成了 GIF 动画。
另外还可以利用 Excel,把心仪妹子的图片拿到手,然后用 Excel 化成点阵图并进行油画效果的处理,然后送给她撩一撩。
4、撰写八股文
这是帮朋友实现的一个项目,他们实验室是研究某类事故并对重大事故进行鉴定,最后发布 word 版的正式报告。之前的工作流程是在专业的软件中完成计算和仿真,最后按照正式报告八股文的行文,把各种关键信息填进去,最后写成 Word 文件。写报告的过程枯燥而没有技术含量,但却要反复进行。
通过下图的 Word+VBA,完成主要的交互界面并连接计算软件。在通过简单的交互获取主要信息后,在后台完成计算并将主要信息填写入八股文的 Word 模版,最终完成报告,同时将结构化的信息存入 Access 数据库。
5、管理项目及同步内容
这是协助某国际大型汽车制造厂完成新品牌及其新款车型上市,面临车型即将断档的窘境,该新车型的上市非常关键,不能错失时间节点。然而,新车型上市涉及到无数分支:制造、产品、市场、渠道、营销、公关、财务等等,同时还要协调欧洲的两个总部以及中国的两个分部。
这次咨询的核心任务就是项目管理,总控整个大项目的进度,并每周向中国区的 CEO 汇报进度并发掘出易出现问题的关键节点以调配资源。我们 4 个咨询顾问分配下去各自负责几个部门或者项目分支,和团队一起规划流程、画甘特图、确认里程碑及时间点、安排负责人等等。当每天回到办公室大家将进度汇总在一起的时候发现了挑战及难点,每条任务线并不是独立发展的,而是各条任务线交织在一起并互相影响。
- 某些核心人员在多个任务线出现。比如:负责预算的财务人员,几乎要出现在各条线中负责相关预算的审批环节
- 某些任务线的里程碑是其他任务线里程碑的必要条件而相互关联。比如:新车的下线时间影响发布会的时间,相关法规测试的通过又影响车辆的下线时间等等
当任务线增多以及任务线之间的交叉越发频繁的时候,汇总的任务将会几何级数增加,这就是我们在项目过程中遇到的问题。于是我利用 Excel+VBA 完成了这个工作的自动化。主要实现的功能:
- 自动将 4 个顾问手中分散的 Excel 文件汇集在一起形成一个大的总表,如下图
- 各顾问手中的表格是按照部门维度来划分的,汇总后需要按照不同的维度来输出不同类型的表格,比如:按任务线输出表格、按责任人输出表格、所有延误任务的表格、所有需要资源重点投入任务的表格等等
在此基础之上,还要将上面提到的各种维度下的所有表格(大概有 200 多张),按要求格式粘贴到 PPT 中,每周提交给中国区的总部进行汇报和评估。密密麻麻的表格如下图。于是,我又写了一个程序将 Excel 中的表格输出到 Powerpoint 中,将一个秘书每次需要数小时才能完成的工作,简化成了一键发布,并可以在 Excel 中完成对 PPT 的更新。
这个项目的程序量不小,近似于写了一个迷你版的 Microsoft Project 来进行项目管理。
最后,下图中密密麻麻的 PPT 每周需要更新一次,每次都是快 100 张的工作量,然而基本上都是靠 Excel 来自动完成更新的。因为 PPT 的模版每次变化不大,我将这些模版记录下来,每周更新的时候只要根据 Excel 中最新的数据更改 PPT 中的数据即可。
6、海量下载 Bloomberg 数据并完成分析
通过 Bloomberg 的 VBA API,海量下载数百只目标股票的 tick data 以及 order book。
并根据实现构建好的数学模型,在后台完成计算,将上述的实时数据转化成每只股票实时的 trading cost,实时展现在交易员最常用的 Excel 界面中,方便交易员评估当下的交易成本以便于优化交易策略。
更多文章请到数据冰山 - 知乎专栏
更多回答请看何明科的主页