昨天一个学员在微信上问我,她说公司去年一季度利润是负的八十万,今年一季度赚了二十万,她在Excel里直接用(20减负80)除以负80,算出来是负125%,她蒙了,问我这个负增长到底对不对。我当时正在改一份全电发票的红冲申请表,直接给她打了个电话,我说你把鼠标放下来,先别急着算,这个事儿课本上那个公式坑了不知道多少人。今天我就在这儿把同比遇到负数怎么算这件事儿从头到尾掰扯清楚,你按我说的操作,以后遇到负数再也不会算错。
首先你得明白,同比增速它没有规定死的公式,但财务分析里最常用的是这个:同比增长率等于(本期数值减去同期数值)除以同期数值再乘以百分之一百。这公式本身没问题,问题出在分母上。当同期数值是负数时,直接套这个公式算出来的结果,你根本没法解读。比如刚才那个学员的例子,同期是负80,本期是20,算出来负125%,意思是下降了125%吗?可实际上利润是增加了100万啊,从亏损到盈利明明是变好了,怎么会是一个负增长呢?这就是分母是负数带来的歧义。
那正确的做法是什么?你要分两种情况来看。第一,如果你只是想比较本期和同期的绝对变化,那就直接用本期减去同期,得到增加额或者减少额,这个数字是最直观的。比如上面那个例子,增加额是20减负80等于100万,一目了然,利润改善了100万。第二,如果你非要用百分比来表示变化幅度,那就得对分母取绝对值。怎么取?在Excel里用ABS函数,等于(本期值减同期值)除以ABS(同期值)再乘以百分一百。这样算出来,同期是负80,本期是20,那就是(20减负80)除以80等于1.25,也就是125%,意思是从负80到20,增幅是125%。这个数字虽然看起来很大,但至少方向是对的一一正数代表改善,负数代表恶化,不会出现明明改善了却算出负数的鬼畜情况。
当然这个事儿各地税务局执行口径不太一样,我说的是一般情况,你最好打12366确认一下。比如我之前碰到一个客户,他们是国企,审计要求必须用统计局的那套方法,统计局的规定里明确写了当基期(也就是去年同期)为负数时,不计算同比增长率,只列示绝对额变动,或者用“扭亏为盈”“由盈转亏”这种文字描述。所以不是所有场合都允许你用这个带绝对值的公式。你在做内部管理报表的时候可以灵活处理,但对外报送的报表,尤其是给政府统计部门、国资委、上市公司的季报年报,一定要先看清楚他们格式要求里的计算逻辑是怎么定义的。
我自己刚入行那会儿就踩过一个坑,印象特别深刻。那时候我在一家制造企业做成本会计,老板要看每月同比分析,我直接用Excel下拉公式,有一行是去年同期因为大额资产减值导致利润是负的,今年正常盈利了,我算出来一个巨大的负数增长率,老板开会时指着那个数字问我什么意思,我硬着头皮说下降了,老板当场骂我是不是数学没学好。后来我翻了好多资料才知道该取绝对值,但那时候报表已经发出去给董事会了,我连夜发更正邮件,脸都丢光了。从那以后我养成了个习惯,做同比分析之前,先快速扫一眼同期数据有没有负数,有的话单独处理,绝对不能用同一个公式拖到底。
现在市面上主流的财务软件,比如用友U8、金蝶云星空、SAP,他们的同比计算逻辑不一定统一。拿用友U8的报表模块来说,你在公式向导里选同比增长率,系统默认的分母也是直接引用上年同期值,不会自动取绝对值,所以如果你直接用系统生成的同期增长率,遇到负数分母照样会算出一堆看不懂的数字。正确的做法是在报表里自定义一个公式,比如把分母改成“IFF(上年同期值<0, -上年同期值, 上年同期值)”,或者直接用ABS函数。金蝶的云星空在分析报表里有一个“同比计算方式”参数,你可以选“分母取绝对值”,这个在V6.0以上版本里都有,但很多老会计不知道,还在用默认的。SAP的BW模块更复杂,需要你在数据源层面定义特殊的同比增长指标,得找懂ABAP的顾问来改。
还有一个常见场景,就是同比的数值本身也是负数的情况。比如去年亏损80万,今年亏损20万,按照绝对值分母公式,算出来是(负20减负80)除以80等于75%,意思是亏损收窄了75%,这个没问题。但如果去年亏损80万,今年亏损100万呢,算出来是(负100减负80)除以80等于负25%,说明亏损扩大了25%,方向也对了。所以只要分母取绝对值,正负号就完全和实际变化方向一致,很好理解。
那有人会问,为什么不能直接用同期数值的绝对值把整个公式变成正数?比如直接拿(本期减同期)除以同期绝对值?其实我刚才说的就是这个意思。但要注意,如果同期是零,分母为零就不能除,那样你得单独写条件:如果同期等于0且本期大于0,显示“不适用”或“N/A”,或者直接写“新增”,如果同期等于0且本期等于0,显示“持平”之类的。总之,你得先判断同位数的正负和是否为零,不能无脑套公式。
我之前在教实操课的时候,有一期专门讲Excel做同比分析的自动化模板,教学生先用IF函数判断。公式大概是这样的:=IF(前年同期=0, “基数很小”, (本年本期-前年同期)/ABS(前年同期)),然后自定义单元格格式,显示成百分比。但这样也有问题,比如“基数很小”这个文本和百分比混在一起,后续做图表不方便。我后来改进了一下,用IF嵌套:=IF(前年同期=0, IF(本年本期>0, “N/A%”, IF(本年本期=0, “持平”, “N/A%”)), (本年本期-前年同期)/ABS(前年同期))。这样至少不会出现除以0的错误。
再深入一点,如果你要做的是同比增速的趋势分析,比如把过去12个月的同比增速画成折线图,遇到基数月份是负数,算出来的增速可能忽大忽小,比如某个月同期是负100万,本月是负95万,算出来增速是5%,下个月同期是负95万,本月是负90万,算出来增速也是5%左右,看起来平稳,但实际上亏损额一直在增加。这时候绝对值分母法也没法完全反映实际情况,更好的做法是只展示绝对额变动的折线图,不要用增速。这个道理很多数据分析师也不懂,他们只知道用公式,结果画出来的图连自己都解释不了。
我还遇到过更离谱的,有个学员把同比增速的公式写反了,应该是(本期减同期)除以同期,他写成(同期减本期)除以本期,结果负数分母的时候算出来完全是另一个方向。还有一个学员,她用的是WPS表格,里面的增长率公式默认会跳过0和负数,直接显示为“#DIV/0!”,她就手动把公式改成常规数学公式,结果算错。这些细节你不能怪软件,只能怪自己对底层逻辑没吃透。
说到这儿,我想起去年年底帮一个学员调她的年度预算决算对比报表,她的研发费用同比算出来是负180%,她以为研发投入大幅下降,结果我一查,原来是她把今年和去年的数字弄反了,而且去年是负数(因为费用冲回了),今年是正数,导致计算结果荒谬。这种低级错误在事务所审报表的时候特别常见,所以你在做同比分析的第一件事,就是把同期和本期的原始数据核对清楚,确认数字的正负号和金额本身没错,再谈怎么算。
另外,如果你是做全电发票的,或者用新版电子税务局里的财务报表模块,那个报表系统自带的同比比算也是根据财务报表取数自动生成的。我在实操中发现,很多企业的利润表里“净利润”这一栏,如果去年是负值,系统默认生成的同比增长率那个单元格就会显示成一段灰色的文字,比如“上年同期为负,不计算增长率”。这是符合会计信息披露规范的。但如果你用的是资产负债表科目,比如“应收账款”的同比,一般不会遇到负数问题,但“未分配利润”就可能出现期初负值,这个也要注意。
所以我的建议是,你在做任何同比分析之前,先在Excel里拉一个数据透视表,把同期的值单独筛选出来,用条件格式把负数标红,然后对这部分单独修改公式。不要一键拖拽到底,你的手速再快,也比不上算错后改错花的时间。我亲眼见过一个财务经理,用数据透视表的计算字段自动算同比增速,直接导出报告给老板,结果报表里连续三个月的数据因为同期负值导致增速曲线完全失真,老板还拿那个曲线去开董事会,最后被审计发现质疑数据真实性,他差点背处分。
为了让你记住,我把核心的点总结一下:第一,分场景,内部管理用绝对值分母,对外报送先用常规公式,如果同期为负,坚决不显示百分比,改用文字或绝对额。第二,Excel公式请用ABS函数,并且单独处理同期为零的情况。第三,做图表时,只要基期有负数,就别用同比增速折线图,改用实际数值柱状图。第四,如果公司用的是金蝶或用友,进去找一下系统设置里有没有“分母取绝对值”的开关,没有的话手动改报表公式。第五,多打12366确认当地统计部门或税务局的特殊要求,不是所有口径都认绝对值分母的。
最后再分享一个我自己的小习惯。我每个月做财务分析报告,都会在同比分析那一节的最下面加一行备注,大概写:“本期与去年同期数据对比中,若去年同期为负数,则同比增长率采用分母取绝对值的方式计算,以反映实际变化方向。”这样即便内外口径有差异,谁看了也知道你是按什么规则来的,至少不算错。
最近整理了一份全电发票红冲操作流程截图,谁要就私我。
