如何在Excel中少犯二(I)
作者:何明科
链接:https://zhuanlan.zhihu.com/p/23472480
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
收到不少建议,要求开知乎Live来谈谈Excel。然而考虑到知识储备有限,还是先写文章来满足大家的需求,同时从特别窄的话题开始:“如何在Excel中少犯二”。从这个话题开始的理由特别简单:首先,时常在别人的Excel数据模型中发现各种细小错误,哪怕作者花费再多的时间把图表搞得再精美,顿时对整个模型的结论产生怀疑;其次,Excel数据模型是经常要在现场分享并不断调试数据,经常看见作者手忙脚乱得更改输入和公式,忙中经常出错。
巴菲特曾说,犯错少就是成功。特别是那些重大而简单的弱智错误。这个理论套用到Excel做数据模型上面,一样成立。对于Excel这种人人都会的工具,少犯二的目标看似简单。然而,量变产生质变,当成千上万的数据堆积在一起,同时带来千丝万缕的函数关系,少犯二就会成为一个高大上的目标。如果不信,可以试试从1开始写数字写到600,能否保证一字不差(这是一个经典的街头骗局)。
因此在Excel中少犯二并不简单,如同要做到如何写好程序一样,需要引入一套方法论,在下面分步骤列出。

第一层:提升输入质量
通过使用“数据有效性”功能,减少输入的错误,设置输入的有效性检查(比如:手机号码是11位等等),尽量避免"Garbage In, Garge Out"。
Excel数据模型中,存在不同类型的数据:常数、可调参数、中间结果、最终结果等等。不少的错误发生在混淆各种类型的数据或者更改了不能调整的中间结果而污染最终结果。因此可以考虑对不同的数据,用颜色或者worksheet进行区隔,下图左方就是利用颜色标注不同的数据:有些是供修改的,有些是最后结果及中间过程而不能修改。这些措施都是为了在模型的制作过程以及调试过程中,避免误改误删数据。如果要想做到极致,还可以使用下图右方的方法,直接利用“保护工作表”功能,对不能修改的数据进行保护。

另外,对于一些经常使用的输入区域(比如,A1:A299),往往反复出现在Sum或者Vlookup等函数中,可以考虑将它们定义成变量,并可以在“名称管理器”中进行修改、增加和删除等管理。反复使用的时候就会非常方便,比如:=Vlookup(A1,data,2,false)这种简单的写法。

第二层,提升输出质量和增加输出维度
不少人在用Excel输出结果的时候,往往就事论事,把输出局限在较小的范围,不仅容易忽略错误,而且会失去多个视角。但如果能够在现有输出结果的基础扩展审视输出的维度,就能获得更全息的视角。以财务三张报表而言,当然可以妥妥得输出经典的报表格式,但如果能够多计算一些财务指标并放在合适的位置(如下图中所示的EBIDTA、Cash flow from operation、EBIDA/Interest Expenses等等),不仅可以部分校验运算过程,还能从多个维度反应企业的财务状况,当然也更容易发现可能存在的计算误差,从而提升输出的质量。
第三层,检验运算过程
最简单粗暴的方式,利用函数框中对输入不同颜色的标注,对运算过程及输入参数进行检查,看是否达到预期或者有犯二的差错。

升级一些,可通过“追踪引用/从属单元格”,对运算过程进行检查,尽可能避免公式运算中输入参数的犯二。

再升级一些,可以对一些关键指标以及核心等式就行复检。比如对于财务报表中最基础的等式“资产=负债+权益”,在做Financial Modeling的过程中,都要设置专门的一行进行检查,类似于化学方程式的配平检查。
(未完待续)
如何在Excel中少犯二(I)的更多相关文章
- 如何在Excel中通过VBA快速查找多列重复的值
今天项目组的一个同事问我如何快速的找到一个Excel中第3列和第5列的值完全重复的值,我想了想虽然Excel中自带查找重复值的功能,但是好像只能对同一列进行比较,所以就写了一个VBA进行处理,VBA非 ...
- [VBA]用一个简单例子说明如何在Excel中自定义函数
Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...
- 如何在Excel中提取小数点后面的数字?
Excel中,如果某个单元格中包含一个带小数,要用公式提取该数值小数点后面的数字,例如A1单元格中包含一个数值“59178.68”,在B1单元格中输入下面的公式: =RIGHT(A1,LEN(A1)- ...
- C#/VB.NET 如何在Excel中使用条件格式设置交替行颜色
说起高亮数据行,不让人想起了交替颜色行,有的人把交替颜色行也都设置成高亮,不仅不美观,而且对阅读还是个干扰.隔行交替的颜色是为了阅读不串行,这些行只是环境,数据才是主体.那么如何通过C#/VB.NET ...
- 如何在Excel中启用宏?
OFFICE2003版本中启用宏的方法: 1.首先打开EXCEL应用程序. 2.点击上方的"工具"--"宏"--"安全性" 3.在" ...
- 如何在EXCEL中找出第一列中不包含的第二列数据
1.找出第一列中不包含的第二列数据:=IFERROR(VLOOKUP(A:A,B:B,1,0),"无") 2.A列相同,B列相加:=SUMIF(G:G,G1,J:J)
- 如何在excel中把汉字转换成拼音
---恢复内容开始--- 1.启动Excel 2003(其它版本请仿照操作),打开相应的工作表: 2 2.执行“工具→宏→Visual Basic编辑器”命令(或者直接按“Alt+F11”组合键),进 ...
- EXCEL-如何在excel中对图片进行批量排版
新建EXCEL->导入图片->如果每张图高度为33个单元格,共计10张图,那么将最后边的那张图(即正对着你的那一张)剪切粘贴到33*9行第一个单元格处->按F5定位"对象& ...
- Azure DevOps Server(TFS): 在Excel中解除服务器同步
通过Azure DevOps Server 提供与Excel集成的功能,用户可以非常便捷地使用Excel,实现工作项数据的同步. 对于需要批量处理数据.离线工作.制作临时报表的用户来说,这个功能必定成 ...
随机推荐
- 将递归函数非递归化的一般方法(cont)
本文通过模拟汇编里的stack机制,构建一个自己的stack,然后将上一篇blog末尾的递归函数void bst_walk(bst_node_t *root)非递归化. o libstack.h #i ...
- HTTP请求返回状态详解
当用户试图通过 HTTP 访问一台正在运行 Internet 信息服务 (IIS) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码.状态代码可以指明具体请求是否已成功,还可以揭示请求失 ...
- 敏捷开发(五)- 框架SCRUM内容
本文主要是为了检测你对SCRUM的了解和使用程度,通过本文你可以检测一下 1.你们的SCRUM项目中各个角色是否合格, 2.SCRUM上面需要的会议是否有遗留,会议过程是否正确 3 ...
- 爬虫代码实现五:解析所有分页url并优化解析实现类
如图,我们进入优酷首页,可以看到电视剧列表,我们称这个页面为电视剧列表页,而点击进入某个电视剧,则称为电视剧详情页.那么如何获取所有分页以及对应的详情页呢,通过下面的分页得到. 因此,首先,我们将St ...
- Maven入门指南 :Maven 快速入门及简单使用
开发环境 MyEclipse 2014 JDK 1.8 Maven 3.2.1 1.什么是Maven? Maven是一个Java语言编写的开源项目管理工具,是Apache软件基金会的顶级项目.主要用于 ...
- 能量项链AC了
我打算写出一个尽量看起来像是人话的解题报告. 然而这道题我还是[虽然AC但不会做] OYZ
- GNU Octave fact函数输出
无意间发现了这么一个函数,可以随机输出关于RMS的笑话.挺有意思的. `fact' is a function from the file /usr/share/octave/3.6.2/m/misc ...
- php函数搜集
数组去重: 方法1:php自带此功能的函数array_unique($arr) 方法2:$arr = array_flip(array_flip($arr)); //这样便可以删除重复元素. 比上面的 ...
- vsftp 详解鸟哥版
FTP (File Transfer Protocol) 可说是最古老的协议之一了,主要是用来进行档案的传输,尤其是大型档案的传输使用 FTP 更是方便!不过,值得注意的是,使用 FTP 来传输时,其 ...
- 【cocos2d-js 3.0】制作2048
2048:在一个4X4的方阵中,玩家需要滑动上面的数字,如果俩个数字相邻并且相等,则相加,需要达到2048,方可胜利. 因为在浏览器操作,所以此例的操作方法为:键盘上的w,s,a,d代表上下左右,也可 ...