我在Excel里用了3年WEEKNUM,直到财务告诉我所有周报都算错了
一个函数名称的差异,让我在全员大会上无地自容。
那是去年Q3的季度总结会。财务总监把PPT翻到销售周报那一页,皱了皱眉,然后说了一句我到现在都记得的话:"这个季度的周报数据有问题,第27周和第28周的销售额对不上,差了整整一周。"
会议室里十几个人,目光齐刷刷地看向我。那份周报模板是我做的。
我当时脑子里一片空白。这个模板我已经用了三年了。从入职第一天起就在用。每个月、每个季度、每年年底,所有人都在用这张表填数据、做汇报。三年了,没人说过有问题。
怎么可能突然就差了一周?
WEEKNUM 和 ISOWEEKNUM,就差三个字母
回到工位上,我把那张表从头到尾查了一遍。数据源没问题,公式引用没问题,透视表也没问题。最后我盯着那个最不起眼的公式看了五分钟——=WEEKNUM(A2)。
就是它。
我三年前写这个模板的时候,随便搜了一下"Excel 周数",看到 WEEKNUM 这个函数名,觉得挺直白的,就用上了。后面再也没想过这个事。
但问题在于:WEEKNUM 默认用的是美国体系。它把每周的第一天算作周日,而且第1周包含1月1日——不管1月1日是周几。
而中国的公司、欧洲的客户、ISO国际标准,用的都是周一为始的 ISO 8601 体系。对应的 Excel 函数叫 =ISOWEEKNUM(A2)。
这两个函数差三个字母。就三个字母,让我三年的周报数据全偏了一周。
"WEEKNUM 和 ISOWEEKNUM 就差三个字母。就三个字母,让我三年的周报数据全偏了一周。"
为什么三年没人发现?
说实话,这个问题能藏三年,我后来想了一下,有几个原因。
第一,大部分人输入的本来就是估算值。销售填周报的时候,很少去精确核实"这周到底是第几周"。看到模板上写着 Week 27,就把这周的数据填进去。数据偏差一周,在周报的颗粒度下其实不太显眼。
第二,大家习惯了。一个模板用久了,没人会去质疑它。你觉得既然三年都没问题,那它应该没问题。
第三——也是最让我难受的一点——WEEKNUM本身的行为每年都在变。有些年份,美国体系和ISO体系的第1周刚好重合,一整年的数据都是对的。但有些年份(比如2026年),两个体系的差距刚好拉大到一整周,问题就暴露了。
也就是说,我的模板在某些年份是对的,在某些年份是错的。这种间歇性bug是最难发现的。
正确的做法很简单
如果你也在用Excel做周报,换一个函数就行:
=ISOWEEKNUM(A2) // ISO 8601 标准,周一为始 =WEEKNUM(A2, 21) // 也是ISO标准,参数21指定周一 =WEEKNUM(A2, 1) // 美国体系,周日为始(默认)
你也可以不依赖Excel,直接用在线工具验证——比如 WeekNumber.cc,输入日期就能看到ISO、美国、简易三种体系的周数分别是多少,一目了然。
我现在的习惯是,每次做周报模板,先用在线工具抽查几个日期,确认周数跟ISOWEEKNUM对得上,再往下做。多花两分钟,省掉的是下一次全员大会上的尴尬。
我学到的教训
这件事教会我的不是"Excel函数要用对"——那个太浅了。真正的问题是:当你觉得一个东西"应该没问题"的时候,恰恰是最危险的时候。
我用了三年WEEKNUM,从来没怀疑过它。不是因为它对,而是因为它没出过让我看得见的错。
现在每次有人问我"这个模板准不准",我都会说:"我验证过,但如果你不放心,我们可以一起再过一遍。"我不再说"肯定没问题"——因为我说过三年,结果全错了。