ARTICLE · 1131912
合同执行到哪了?让AI写个VBA,Excel点一下全出来
一键AI办公实战 · 第10期专注AI办公提效 🚀 每周分享实测好用的AI办公技巧Excel自动化 / 会议纪要AI化 / 智能招投标
领导问"合同执行情况",以前要小半天
领导有时一句话,就得查半天——"帮我查一下,截至昨天所有在执行的合同,各自花了多少钱、还剩多少额度、有没有快到期的。"
你得打开合同台账一页页翻,金额抄到纸上,再回报销表里一笔一笔找对应的报销,最后按计算器加。数字加完还得回头核一遍,怕漏。
现在我用一个按钮。表上改两个日期,点一下,秒出结果。
现在改两个日期,点一下

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

报告一共 8 列:合同名称、合同金额、合同开始日期、合同结束日期、已报销金额、剩余额度、剩余天数、合同状态。
该提醒的整行变色,逾期的自动顶到最上面,末尾加一行合计。

最后还弹个窗告诉我:已结清几条、已逾期几条、进行中几条,其中不到 120 天的有几条。
先说清一个口径,不然你会觉得数字不对:这里的「已报销金额」是统计期间内花的钱,不是合同签以来的总数。所以上面才要填两个日期——报上半年就填 1 月 1 日到 6 月 30 日,报全年就填到 12 月 31 日。
这一页就三个零件
两个日期格,一个按钮,一块输出区。8 列里,4 列是抄来的,4 列是算出来的:
← 表格可左右拖动 →
抄的那 4 列,一份合同只录一次,在合同台账录入表里。这一页一个字都不用手填。
按钮背后,AI 帮我做了三件事
我不写代码。还是老办法:把要什么讲清楚,让 AI 写。这次要它做三件事。
一、判断"哪些合同正在执行"
看两个时间段有没有重叠:合同开始日期不晚于统计结束日期,并且合同结束日期不早于统计开始日期。
这个判断挺通用。查合同、查项目、查会员卡有没有过期,都是同一个道理:两个时间段叠上了,就算在期内。想不明白也没关系,提示词里写"开始日期在前、结束日期在后,都算在执行",AI 会给你写对。
二、算已报销和剩余额度
拿这份合同的名称,去费用报销录入表里,把统计期间内的报销金额加起来,就是已报销;合同金额减掉它,就是剩余额度。
三、判状态,再按紧急程度排一遍
顺序是:台账里结算状态写了"已结清",就是 √已结清;结束日期已经过了,就是 ■已逾期;剩下的都是 ●进行中。
三个状态之外,我还有一道线:进行中、剩余不到 120 天的,整行红字,几页合同里一眼就能扫到。这几份是我每天最该盯的。
出表前还会再排一遍:■已逾期顶到最上面,●进行中在中间,√已结清沉到最后。要盯的那几条,永远在最前面。
AI 当时回我的核心判断就这十几行(变量名我换成了中文,方便你看懂):
' 正在执行的合同 = 两个时间段有重叠
If 合同开始 <= 统计结束 And 合同结束 >= 统计开始 Then
' 状态按优先级判:先看结清,再看逾期,其余算进行中
If 结算状态 = "已结清" Then
状态 = "√已结清"
ElseIf 合同结束 < Date Then
状态 = "■已逾期"
Else
状态 = "●进行中"
End If
End If
' 出表前再按 逾期 → 进行中 → 已结清 排一遍
(长按上方任意一行即可整段复制)
三个坑,我都踩过
一、日期可能是文本。表里日期要是写成了"2026年1月1日",或者是文本格式,宏认不出来,会直接报错。我让 AI 顺手加了个日期转换函数,怎么写都能认。这个别自己琢磨,提示词里带一句就行。
二、合同名称必须一字不差。统计是拿名称去报销表里对的,"××公司"和"××有限公司"在它眼里是两笔。上一次让你把合同名称做成下拉选择,就是为了今天这一步:从台账里选,入口上就没有第二种写法。
三、代码粘贴的位置和上次不一样。上次是工作表事件,必须粘在「费用报销录入表」名字底下;这次是个普通过程,粘在哪儿都能跑。

给 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. 最后告诉我:代码粘贴到哪个位置、按钮怎么插入并指定这个宏,分几步说清楚。
(长按上方任意一行即可整段复制)
下一期:按供应商看谁花得多
这份执行表是"按合同"看。下一条线是"按单位"看:客商付款统计表——同一个供应商,这段时间报了多少次、一共多少钱、最后一次是哪天。也是点一个按钮。
你们领导问合同执行情况的时候,你一般怎么答?评论区说一声。身边要是有天天对合同的同事,转给他,让他照着试一遍。
#Excel #VBA #合同台账 #办公自动化 #AI办公
一键 AI 办公实战
关注我,每天 5 分钟,把 AI 变成你的生产力
· VOL.10 ·