z35资讯网 ~ 极客资讯终端 v1.0 首页 专栏 订阅

冬季做年终报表,Excel这几个函数坑我踩过

date // channel // 热点 id //

每年12月到次年1月,我的Excel就进入高危期。年终盘点、跨年销售汇总、供暖季台账全挤在一起,函数稍微写歪一点,整张表的数就废了。去年12月31号我交了一份库存账龄表,1月4号老板打开,数字全变了,原因就出在 TODAY() 上。下面这些坑,都是我实打实踩过的。

TODAY和NOW是活的,别拿它当基准

TODAY() 和 NOW() 属于易失性函数,每次打开文件、每次按 F9 都会重新取值。12月做的表,1月打开,它已经变成新一年了。我那张账龄表用的是 =TODAY()-C2 算天数,跨年之后所有数字凭空多出365,30天内的应收账款全变成逾期一年。稳妥的做法是新建一个参数单元格,比如 B1 手填 2024-12-31,公式里全部引用 $B$1,这样表就是死的,什么时候打开都一样。NOW() 更坑,它带时间,=IF(A2=NOW(),...) 基本永远不成立,因为秒数对不上,要比较日期就老实用 TODAY() 或者直接写死日期。

冬季做年终报表,Excel这几个函数坑我踩过

跨年日期函数最容易翻车

我见过太多人写 =YEAR(A2)=2024 来筛去年的数据。这种写法12月没问题,一到1月,你要统计的上一年12月就跑到别的年份去了,SUMIFS 直接返回0,然后一群人对着空白单元格找半天原因。正确的做法是用起止日期卡区间,别用 YEAR/MONTH 判断:

冬季做年终报表,Excel这几个函数坑我踩过

  • 求和条件写 >=DATE(2024,12,1) 和 <=DATE(2024,12,31),两端写死或用参数单元格
  • 日期列先确认格式,单元格左上角带绿色小三角的是文本,SUMIFS 一律当0处理
  • 年份写成文本"2024"和数字2024,Excel认为不是一个东西,用 -- 或 VALUE() 转一下
  • 跨年数据透视表,把日期拖进行区域后右键组合,按年+月分层,比手写公式省事

冬季做年终报表,Excel这几个函数坑我踩过

DATEDIF 是个隐藏函数,输入时没有参数提示,而且它有已知bug。参数用 "yd"(忽略年份算天数)时,跨年结果会莫名多一天或少一天。我拿 DATEDIF("1990/3/1","2025/2/28","yd") 实测过,返回361,明显不对。算年龄、算工龄,我现在的习惯是直接两个日期相减,或者用 YEARFRAC 并把第三参数填1走实际天数,默认的30/360算法跨闰年误差很大。2024年是闰年,2月29日专治各种不服,凡是自己手写365天的地方,跨闰年都会错一天,日期序列相减反而不会出问题。

还有跨天的时间差。夜班考勤,23:30 下班、次日 1:00 上班,直接相减是负数,用 =MOD(B2-A2,1) 就能转回正数,格式设成 h:mm 就行,冬天夜班排得多,这个公式我一年要用好几回。工作日计算也一样,NETWORKDAYS 和 WORKDAY 默认只排除周六周日,不含法定调休,春节前后那几周调休特别乱,1月底放假、2月初补班,直接套函数算出来的交付日期能差出三四天。老实点,把公司发的放假通知整理成一张节假日列表,作为第三个参数传进去。

说白了,Excel函数本身不会因为季节变化,变的是你的数据周期。冬天一到,跨年、跨闰年、跨调休全撞在一起,那些平时看着没毛病的公式就开始作妖。我的习惯是每年12月20号之前,把所有报表里的 TODAY()、NOW()、YEAR() 判断挨个过一遍,能换成固定日期的就换掉。花半小时,能省掉年后被追问一整天的麻烦。

tags //
top