夜雨聆风学习资料网

ARTICLE · 1131912

合同执行到哪了?让AI写个VBA,Excel点一下全出来

合同执行到哪了?让AI写个VBA,Excel点一下全出来
一键AI办公实战 · 第10期
专注AI办公提效 🚀 每周分享实测好用的AI办公技巧Excel自动化 / 会议纪要AI化 / 智能招投标 

领导问"合同执行情况",以前要小半天

领导有时一句话,就得查半天——"帮我查一下,截至昨天所有在执行的合同,各自花了多少钱、还剩多少额度、有没有快到期的。"

你得打开合同台账一页页翻,金额抄到纸上,再回报销表里一笔一笔找对应的报销,最后按计算器加。数字加完还得回头核一遍,怕漏。

现在我用一个按钮。表上改两个日期,点一下,秒出结果。

现在改两个日期,点一下

这是我表里「合同费用执行表」这一页。上面两个格子填统计期间,右边一个「统计查询」按钮,点下去,下面直接出一张报告。

报告一共 8 列:合同名称、合同金额、合同开始日期、合同结束日期、已报销金额、剩余额度、剩余天数、合同状态。

该提醒的整行变色,逾期的自动顶到最上面,末尾加一行合计。

最后还弹个窗告诉我:已结清几条、已逾期几条、进行中几条,其中不到 120 天的有几条。

先说清一个口径,不然你会觉得数字不对:这里的「已报销金额」是统计期间内花的钱,不是合同签以来的总数。所以上面才要填两个日期——报上半年就填 1 月 1 日到 6 月 30 日,报全年就填到 12 月 31 日。

这一页就三个零件

两个日期格,一个按钮,一块输出区。8 列里,4 列是抄来的,4 列是算出来的:

列名
从哪来
说明
合同名称
抄的
来自合同台账录入表
合同金额
抄的
来自合同台账录入表
合同开始日期
抄的
来自合同台账录入表
合同结束日期
抄的
来自合同台账录入表
已报销金额
算的
费用报销录入表里,这段时间该合同的报销合计
剩余额度
算的
合同金额 − 已报销金额
剩余天数
算的
结束日期 − 今天(逾期的显示 0)
合同状态
算的
已结清 / 已逾期 / 进行中

← 表格可左右拖动 →

抄的那 4 列,一份合同只录一次,在合同台账录入表里。这一页一个字都不用手填。

按钮背后,AI 帮我做了三件事

我不写代码。还是老办法:把要什么讲清楚,让 AI 写。这次要它做三件事。

一、判断"哪些合同正在执行"

看两个时间段有没有重叠:合同开始日期不晚于统计结束日期,并且合同结束日期不早于统计开始日期。

这个判断挺通用。查合同、查项目、查会员卡有没有过期,都是同一个道理:两个时间段叠上了,就算在期内。想不明白也没关系,提示词里写"开始日期在前、结束日期在后,都算在执行",AI 会给你写对。

二、算已报销和剩余额度

拿这份合同的名称,去费用报销录入表里,把统计期间内的报销金额加起来,就是已报销;合同金额减掉它,就是剩余额度。

三、判状态,再按紧急程度排一遍

顺序是:台账里结算状态写了"已结清",就是 √已结清;结束日期已经过了,就是 ■已逾期;剩下的都是 ●进行中。

三个状态之外,我还有一道线:进行中、剩余不到 120 天的,整行红字,几页合同里一眼就能扫到。这几份是我每天最该盯的。

出表前还会再排一遍:■已逾期顶到最上面,●进行中在中间,√已结清沉到最后。要盯的那几条,永远在最前面。

AI 当时回我的核心判断就这十几行(变量名我换成了中文,方便你看懂):

' 正在执行的合同 = 两个时间段有重叠

If 合同开始 <= 统计结束 And 合同结束 >= 统计开始 Then

    ' 状态按优先级判:先看结清,再看逾期,其余算进行中

    If 结算状态 = "已结清" Then

        状态 = "√已结清"

    ElseIf 合同结束 < Date Then

        状态 = "■已逾期"

    Else

        状态 = "●进行中"

    End If

End If

' 出表前再按 逾期 → 进行中 → 已结清 排一遍

(长按上方任意一行即可整段复制)

三个坑,我都踩过

一、日期可能是文本。表里日期要是写成了"2026年1月1日",或者是文本格式,宏认不出来,会直接报错。我让 AI 顺手加了个日期转换函数,怎么写都能认。这个别自己琢磨,提示词里带一句就行。

二、合同名称必须一字不差。统计是拿名称去报销表里对的,"××公司"和"××有限公司"在它眼里是两笔。上一次让你把合同名称做成下拉选择,就是为了今天这一步:从台账里选,入口上就没有第二种写法。

三、代码粘贴的位置和上次不一样。上次是工作表事件,必须粘在「费用报销录入表」名字底下;这次是个普通过程,粘在哪儿都能跑。

按钮怎么插:开发工具 → 插入 → 按钮 → 在表上画一下 → 弹出的框里选这个宏。另外老规矩,宏文件要另存为 .xlsm,打开时顶上出现黄条,记得点"启用内容"。

给 AI 的一段话

下面这段就是我当时对 AI 说的原话,你整段复制,把列位换成你自己的就行:

我在用 Excel 管合同和报销,已有三张工作表:

①「合同台账录入表」:B列合同类别、C列合同名称、G列合同金额、

   H列开始日期、I列结束日期、M列结算状态(留空或"已结清"),数据从第3行起;

②「费用报销录入表」:C列报销时间、H列报销金额、I列合同名称,数据从第3行起;

③「合同费用执行表」:D2 填统计开始日期、F2 填统计结束日期,

   第3行是表头,从第4行开始输出结果。

请写一个 VBA 宏,点按钮后执行:

1. 遍历合同台账,凡是"开始日期不晚于 F2、结束日期不早于 D2"的合同都算执行中;

2. 已报销金额=报销表里同名合同、报销时间在 D2~F2 之间的金额合计,

   剩余额度=合同金额-已报销金额;

3. 剩余天数=结束日期减今天,已经过期的记 0;

4. 合同状态按优先级:结算状态写了"已结清"→√已结清;结束日期早于今天→■已逾期;

   其余→●进行中;

5. 进行中且剩余不到 120 天的,整行红字;已结清浅绿底、已逾期浅红底;

6. 出表前按合同状态排序:■已逾期 → ●进行中 → √已结清,

   同一状态里剩余天数少的排前面;

7. 末尾加合计行,金额列合计,灰底加粗;

8. 做完弹窗告诉我:各状态各几条、进行中且不到 120 天的有几条;

9. 日期可能存成文本,也可能是"2026年1月1日"这种写法,都要能识别;

10. 只统计 B 列为「发包合同」的(这条不需要就删掉);

11. 最后告诉我:代码粘贴到哪个位置、按钮怎么插入并指定这个宏,分几步说清楚。

(长按上方任意一行即可整段复制)

下一期:按供应商看谁花得多

这份执行表是"按合同"看。下一条线是"按单位"看:客商付款统计表——同一个供应商,这段时间报了多少次、一共多少钱、最后一次是哪天。也是点一个按钮。

建议收藏这一篇:那段提示词、期间重叠和状态优先级、120 天红线、出表排序、三个坑,都在这儿了,下次照着抄就行。

你们领导问合同执行情况的时候,你一般怎么答?评论区说一声。身边要是有天天对合同的同事,转给他,让他照着试一遍。

往期回顾:第 8 期《报销单还在手录账号?Excel 填个序号,连大写金额都替你写好》

#Excel #VBA #合同台账 #办公自动化 #AI办公

一键 AI 办公实战

关注我,每天 5 分钟,把 AI 变成你的生产力

· VOL.10 ·

相关学习资料