ARTICLE · 1192167
DeepSeek写Excel:函数与VBA双法对弈,各展锋芒!
同一个问题,两种方案,理想与现实的差距有多大。
你有没有遇到过这种情况:打开DeepSeek,输入一段需求描述,它给了你一个看起来很完美的Excel公式,复制粘贴进去,结果却报错了。
问题可能不在DeepSeek,而在你选错了“武器”。
我用同一个问题,分别让DeepSeek生成函数公式和VBA代码,结果差距比想象中大得多。
先看问题
假设你有一张销售明细表:A列是日期,B列是销售员,C列是产品,D列是金额。你需要:按销售员汇总本月销售额,并自动填入汇总表的对应单元格中。
这个需求不复杂,但足够典型。我把同样的描述分别发给DeepSeek,看它给出的两套方案。
方案一:函数公式
DeepSeek给出的方案是:
=SUMIFS(明细表!D:D, 明细表!B:B, A2, 明细表!A:A, ">="&DATE(2026,10,1), 明细表!A:A, "<="&DATE(2026,10,31))
公式本身没问题,逻辑清晰。但接下来才是关键。
函数路线的日常是这样的: 数据源更新了,公式自动重算,汇总表永远是最新的。你不需要做任何操作——这就是函数最大的魅力,数据变了,结果跟着变。Excel内置函数的“易失性”特性意味着只要输入数据变化,结果就会实时更新。
但问题也来了。如果你的数据表新增了一行,公式的引用范围D:D是全列引用,倒是不用改,但性能会随着数据量增长而下降。更麻烦的是,如果你的需求升级为“把汇总结果复制到另一个工作簿,并自动发送邮件给主管”,函数就彻底无能为力了。公式能算数,但它不能做事。
方案二:VBA代码
DeepSeek对同一个需求生成了一段VBA宏:
代码能跑,逻辑也对。但它使用了字典对象(Dictionary),这在VBA中需要额外启用“Microsoft Scripting Runtime”引用,否则会触发编译错误。你还需要把文件另存为.xlsm格式,否则宏根本无法保存。
更重要的是,运行一次,结果就固定了。VBA算出来的数字是静态快照,数据源再变,汇总表不会自动更新,除非你重新运行宏。
但VBA能做到函数做不到的事:它能遍历、能判断、能写入、能格式化、能跨工作表、跨工作簿操作,甚至能调用系统命令。DeepSeek生成VBA代码的能力不仅限于简单的计算,还包括生成带参数的宏模板、将Python逻辑转换为VBA等复杂场景。一句话,函数负责“算”,VBA负责“做”。
四个维度,看清两条路
实时性:函数赢
函数的最大优势是动态更新。数据变了,公式自动重算,无需任何手动操作。VBA的结果是静态的,除非设置了事件触发或定时器,否则数据变化后结果不会自动刷新。如果你的报表需要“打开就是最新数据”,函数是唯一的选择。
任务边界:VBA赢
函数的能力边界很清晰:计算、查找、聚合、文本处理。一旦需求超出“在单元格里算出一个值”的范畴——比如批量重命名工作表、自动生成多份报告、按条件拆分工作簿——函数就无能为力了。VBA的边界是Excel本身的能力边界,基本上你能手动做的事情,VBA都能自动化。用DeepSeek写VBA来处理“遍历某列所有非空单元格并将含特定关键词的整行复制到另一张表”这类任务,效率远超手动操作。
操作门槛:函数赢
函数方案的操作流程是:复制公式→ 粘贴到单元格 → 下拉填充。三步搞定,不需要任何编程知识。VBA方案的流程是:获取代码 → 打开VBA编辑器(Alt+F11) → 插入模块 → 粘贴代码 → 保存为.xlsm → 运行。步骤更多,对不熟悉VBA编辑器的人来说有心理门槛。不过,一旦宏设置好并绑定了按钮,后续使用只需要点一下按钮,反而比函数更省事。
调试与出错:函数更直观
函数出错了,你可以在单元格里直接看到错误值,用“公式求值”功能逐步追踪。VBA出错了,弹出一个错误对话框,代码定位到某一行,你需要理解代码逻辑才能排查。好在DeepSeek可以辅助调试VBA报错——把错误信息和代码片段发给它,它能分析出是对象未激活、范围越界还是变量类型不匹配。但这也意味着你的调试过程多了一个“转述给AI”的环节。
一张表说清楚
维度 | 函数公式 | VBA代码 |
实时更新 | ✅ 自动重算 | ❌ 需手动运行或事件触发 |
任务范围 | 计算、查找、聚合 | 几乎一切Excel操作 |
上手难度 | 低,复制即用 | 中,需了解VBA编辑器 |
出错排查 | 直观,单元格可见 | 需理解代码逻辑 |
文件格式 | 任意 | 必须.xlsm |
适合场景 | 动态报表、实时看板 | 批量处理、自动化流程 |
到底怎么选?
一句话原则:如果答案是“数据变了结果要跟着变”,用函数;如果答案是“帮我自动完成一串操作”,用VBA。
具体场景对照:
1.销售日报/周报的动态汇总 → 函数。数据每天更新,用SUMIFS+日期条件即可。
2.从100张格式相同的工作簿中提取指定数据合并到一张表 → VBA。函数做不到跨文件批量操作。
3.客户分级、提成计算等规则固定的计算 → 函数。IFS、XLOOKUP等函数可以优雅解决。
4.自动生成带格式的月度报告并发送邮件 → VBA。涉及格式设置、文件操作、邮件调用,只有VBA能做到。
5.还有一个务实的建议:两者可以混用。在VBA代码中调用Excel的工作表函数来计算中间结果,既能享受VBA的自动化能力,又不需要在代码里手写复杂的计算逻辑。DeepSeek完全有能力生成这种混合方案。
最后
DeepSeek在这两条路线上的表现各有侧重。公式生成方面,它能理解自然语言描述并输出结构清晰的公式,多数情况下逻辑准确。VBA代码方面,它的编程能力更强,生成的代码可以直接运行,还支持参数化模板和多轮调试。但无论哪种方式,AI生成的代码和公式都需要人工验证——特别是在引用范围和数据格式方面,DeepSeek偶尔会出现偏差。
选对路线,适合自已才是最主要的。















































































