Excel 2013 按日期延迟匹配发票总额与付款
社区小冯
结论
可以。在 Excel 2013 中直接使用 SUMIFS,不需要辅助列,也不用按 Ctrl+Shift+Enter 输入数组公式。
假设:
C列是当前期间的开始日期;D列是期间结束日期;F列是发票总额;$C$7是付款延迟天数k。
公式如下:
=SUMIFS($F$12:$F$25,$D$12:$D$25,">="&C12-$C$7,$D$12:$D$25,"<="&D12-$C$7)
公式原理
每笔发票的实际付款日期为:
发票期间结束日期 + k
要把付款金额计入当前行对应的期间,需要满足:
当前期间开始日期 <= 发票期间结束日期 + k <= 当前期间结束日期
把 k 移到不等式另一侧,可得:
当前期间开始日期 - k <= 发票期间结束日期 <= 当前期间结束日期 - k
所以,SUMIFS 只需在 D 列中筛选处于这个范围内的结束日期,再汇总对应的 F 列金额。
第一个条件是:
">="&C12-$C$7
它表示付款日期不能早于当前期间的开始日期。
第二个条件是:
"<="&D12-$C$7
它表示付款日期不能晚于当前期间的结束日期。
为什么优先使用 SUMIFS
SUMPRODUCT 也可以完成相同的计算:
=SUMPRODUCT(($D$12:$D$25+$C$7>=C12)*($D$12:$D$25+$C$7<=D12)*$F$12:$F$25)
不过,如果 D 列中的公式会返回空字符串 "",直接执行:
$D$12:$D$25+$C$7
可能出现 #VALUE! 错误。
SUMIFS 不会对整个日期区域逐项执行加法,处理公式产生的空白值时通常更稳定。它也是普通公式,输入后直接按 Enter 即可。
边界条件
公式使用了 >= 和 <=,因此付款日期正好等于期间开始日或结束日时,也会计入该期间。
如果两个期间首尾相接,并且前一期间的结束日期也是下一期间的开始日期,同一笔金额可能被重复计算。此时可以采用“包含开始日、不包含结束日”的区间:
=SUMIFS($F$12:$F$25,$D$12:$D$25,">="&C12-$C$7,$D$12:$D$25,"<"&D12-$C$7)
具体使用 < 还是 <=,取决于工作表对期间边界的定义。
注意事项
C、D列必须存储为 Excel 能识别的真实日期,不能是外观看起来像日期的文本。$C$7应填写整数天数。如果要按工作日计算延迟,不能直接加减k,需要结合WORKDAY等函数重新确定付款日期。SUMIFS会汇总日期范围内的所有发票。如果业务规则要求每个期间只能匹配一笔发票,还需要增加唯一匹配条件。- 固定范围
$12:$25可以根据实际数据量扩展,但求和区域与所有条件区域的大小必须完全一致。
备注:内容仅供参考。
