首页  ›  经典案例  ›  发票管理

进项发票台账自动校验与去重

从电子税务局导出的进项发票明细几千行,要查重复报销、号码录错、项目漏归集,纯手工挑要一整天。
共 4 步,涉及 GROUPBY、REGEXEXTRACT、UNIQUE、COUNTIF、LET

发票管理进阶GROUPBYREGEXEXTRACTUNIQUECOUNTIFLET

原始困境

从电子税务局导出的进项发票明细几千行,要查重复报销、号码录错、项目漏归集,纯手工挑要一整天。

数据情况

导出表含发票号码(20 位,常与发票代码连写成一长串)、开票日期、销方名称、金额、税额,另有一列人工填写的项目名称。

解决步骤

1从混杂文本里把发票号码干净地抠出来
=REGEXEXTRACT(A2, "d{20}|d{8,12}", 1)
系统导出的发票号码常和代码连成一长串,或中间夹空格、横线。正则一步提取,免去 LEFT / RIGHT / MID 反复试长度的麻烦。
2查重,找出被重复录入的发票
=IF(COUNTIF($B$2:$B$5000, $B2)>1, " 重复", "正常")
以发票号码为准查重。重复发票是税务稽查的高频问题点,这一列非空的必须逐张核实来源。
3按项目一键汇总金额与税额
=GROUPBY($E$2:$E$5000, $H$2:$H$5000, SUM, 2, 1)
E 列为项目名称、H 列为税额,一条公式生成带总计的汇总表。月底做进项分摊、项目成本归集直接用,不用再插透视表。
4把多步逻辑收进 LET,公式更短更快
=LET(票号, REGEXEXTRACT(A2,"d{20}|d{8,12}",1), 次数, COUNTIF($B$2:$B$5000, 票号), IF(次数>1, "重复"&次数&"次", "正常"))
原公式里票号要算三遍。LET 只算一次并命名中间量,公式从约 120 字符缩到 70 字符,计算量降到三分之一,几千行时提速明显。

效果

从人工挑一整天,变成公式秒出结果、只复核标红的那几十张;同时把重复报销这个风险点固化成台账里的一个自动标识列。

易错点

正则里的 d 在 Excel 中要写成双反斜杠。另外 REGEXEXTRACT 需 Microsoft 365,WPS 暂无此函数,退而求其次可按固定位置用 MID + SEARCH 截取。

进阶优化

加一列长度校验 =IF(LEN(B2)<>20,"长度异常",""),可拦截录入时漏位的情况。

相关阅读

← 返回财税实务通首页,查看更多函数与政策