ARTICLE · 1341533
用 AI 写 Excel VBA ④:先描述表结构,再让 AI 动笔
系列名称:用 AI 写 Excel VBA|20 节零基础实战课
适用环境:Microsoft 365 / Excel 2016+ 桌面版,Windows(WPS 需另装 VBA 插件,Mac 部分 API 不支持)
阅读时长:约 10 分钟
难度:⭐⭐(零基础可跟,重点是"会描述")
🎯 一句话成果
今天你学会一个表结构描述模板,以后每次让 AI 写 VBA 之前,先用这个模板"喂"给 AI,让它读懂你的表再动笔。命中率从 50% 直接拉到 90%+。

📌 场景痛点
你按第 2 讲的公式写了提示词,按第 3 讲把代码贴进了 VBE,结果……
运行报错:
运行时错误 9:下标越界或者:代码能跑,但结果完全不对——它把标题行当数据删了,或者只处理了前 10 行就停了
你检查了提示词,没问题啊。角色、对象、动作、规则都写了。
问题出在哪?
你写了"在销售数据表里删除空行",但 AI 不知道:
你的"销售数据"表,标题在第几行? 数据从哪行开始?到哪行结束? A 列是日期还是序号?有没有合并单元格? 表头叫"金额"还是"销售金额"?
AI 只能按自己的默认假设来写——假设标题在第 1 行、数据从第 2 行开始、没有合并单元格、列名就是它猜的那样。
一旦你的表跟它的假设不一样,代码就翻车。
所以第 4 讲的核心就一句话:让 AI 先读懂你的表,再让它写代码。

🧠 为什么"表结构描述"这么重要
打个比方:
你让一个新人帮你整理文件。你只说"把红色文件夹里的东西搬到蓝色柜子里"。新人去了,发现红色文件夹有 3 个,蓝色柜子有 2 组,他只能猜。猜错了,你骂他,他说"你没说清楚啊"。
AI 就是这个新人——而且是个记忆力超强但没见过你文件柜的新人。你多花 2 分钟描述清楚,它就能一次做对。
📋 表结构描述模板(直接复制用)
【表结构描述】工作表名:____文件位置:____(如:D:\报表\2026年销售数据.xlsm)1. 表格布局:- 标题行在第 ____ 行- 数据从第 ____ 行开始- 数据到第 ____ 行结束(或写"不固定,每次约 ____ 行")- 数据列从 ____ 列到 ____ 列2. 表头(第 ____ 行的每一列叫什么):| 列号 | 列名 | 数据类型 | 备注 ||------|------|---------|------|| A | ____ | 日期/文本/数字/… | ____ || B | ____ | ____ | ____ || C | ____ | ____ | ____ |3. 特殊结构:- 是否有合并单元格:____(位置:____)- 是否有空行/空列:____(位置:____)- 是否有隐藏行/列:____(位置:____)- 是否有公式列:____(哪列:____)- 是否有数据验证/下拉列表:____(位置:____)4. 前 3 行示例数据(脱敏后):| A | B | C | D | … ||---|---|---|---|---|| ____ | ____ | ____ | ____ | || ____ | ____ | ____ | ____ | || ____ | ____ | ____ | ____ | |5. 其他注意事项:- ____
🔍 实战演示:同一个需求,描述前后对比
需求:把"销售数据"表里金额大于 10000 的行标为红色
❌ 不描述表结构(AI 靠猜)
提示词:
你是一个 Excel VBA 专家。请在"销售数据"表里,把金额大于 10000 的行标为红色。代码要简洁,带中文注释。
AI 会怎么猜:
它猜的 | 实际情况可能 |
|---|---|
金额列是哪一列?→ 猜 F 列 | 实际金额在 D 列 |
标题在第几行?→ 猜第 1 行 | 实际标题在第 2 行(第 1 行是大标题) |
数据从哪行开始?→ 猜第 2 行 | 实际从第 3 行开始 |
标红色是标整行还是标金额单元格?→ 猜标整行 | 你可能只想标金额单元格 |
结果:代码大概率报错(列号不对),或者标错了行/列。
✅ 描述表结构后(AI 精准写)
提示词:
【角色】你是一个资深 Excel VBA 开发专家。【表结构描述】工作表名:销售数据1. 表格布局:- 标题行在第 2 行(第 1 行是合并的大标题"2026年销售汇总")- 数据从第 3 行开始- 数据到第 500 行左右(不固定,用 End(xlUp) 找末行)- 数据列从 A 列到 G 列2. 表头(第 2 行):| 列号 | 列名 | 数据类型 | 备注 || A | 日期 | 日期 | || B | 部门 | 文本 | || C | 销售员 | 文本 | || D | 销售金额 | 数字 | 单位:元 || E | 成本 | 数字 | || F | 利润 | 公式(=D-E) | 不要改这列 || G | 状态 | 文本 | 下拉列表:已审核/待审核/已驳回 |3. 特殊结构:- 第 1 行 A1:G1 合并,内容是"2026年销售汇总"- 无空行、无隐藏列- F 列是公式列,不要修改4. 前 3 行示例数据(脱敏后):| 日期 | 部门 | 销售员 | 销售金额 | 成本 | 利润 | 状态 || 2026/1/3 | 销售部 | 张三 | 15000 | 8000 | 7000 | 已审核 || 2026/1/3 | 技术部 | 李四 | 8000 | 5000 | 3000 | 待审核 || 2026/1/4 | 销售部 | 王五 | 22000 | 12000 | 10000 | 已审核 |【动作】把"销售金额"(D列)大于 10000 的整行标为浅红色(RGB 255,200,200)。【规则】- 从第 3 行开始检查(跳过标题)- 只标色,不删除、不修改任何数据- 标色前先清除原有颜色(避免重复运行时颜色叠加)- 完成后弹窗报告标了多少行【输出】- 完整可运行代码- 中文注释- 包含错误处理- 不要使用 Select/Activate
AI 生成的代码(完整可运行)
Sub 标记高额销售()'========================================'功能:把销售金额>10000的整行标为浅红色'前提:第2行表头,第3行起数据,金额在D列'========================================Dim ws As WorksheetDim lastRow As Long, i As LongDim markedCount As LongDim amount As DoubleOn Error GoTo ErrorHandlerApplication.ScreenUpdating = FalseSet ws = ThisWorkbook.Sheets("销售数据")'找末行(用D列)lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row'先清掉原有颜色(从数据行开始)ws.Range("A3:G" & lastRow).Interior.ColorIndex = xlNone'逐行检查markedCount = 0For i = 3 To lastRow'读取D列金额(跳过空值)If IsNumeric(ws.Cells(i, "D").Value) Thenamount = ws.Cells(i, "D").Value'判断是否大于10000If amount > 10000 Then'标浅红色(整行从A到G)ws.Range("A" & i & ":G" & i).Interior.Color = RGB(255, 200, 200)markedCount = markedCount + 1End IfEnd IfNext iApplication.ScreenUpdating = True'报告结果MsgBox "标记完成!共 " & markedCount & " 行金额大于10000,已标为浅红色。", vbInformationExit SubErrorHandler:Application.ScreenUpdating = TrueMsgBox "运行出错:" & Err.Description & vbCrLf & "出错行号:" & i, vbCriticalEnd Sub
对比一下:这段代码精确地知道金额在 D 列、数据从第 3 行开始、末行用 D 列找、只标到 G 列、清掉原有颜色再标、跳过非数字值——全是因为你在提示词里把表结构说清楚了。

🛠️ 三种表结构描述方式(按场景选)
方式 | 适合场景 | 信息量 | 示例 |
|---|---|---|---|
完整模板 | 复杂表、首次合作、AI 反复写不对 | ⭐⭐⭐⭐⭐ | 上面那个完整版 |
精简版 | 简单表、列少、结构清晰 | ⭐⭐⭐ | 见下方 |
截图+口述 | 表很复杂、描述起来费劲 | ⭐⭐⭐⭐ | 截图贴给 AI + 口头补充 |
精简版模板(日常够用)
工作表名:____标题行:第 ____ 行数据范围:第 ____ 行到第 ____ 行,____ 列到 ____ 列关键列说明:- A列:____(数据类型)- B列:____(数据类型)- C列:____(数据类型)特殊注意:____(合并单元格/空行/公式列等)
🔍 五个最容易漏掉的"表结构细节"
根据前 3 讲读者的高频翻车案例,这 5 个细节最容易被忽略,但影响最大:
细节 | 为什么重要 | 怎么描述 |
|---|---|---|
标题行位置 | AI 默认第 1 行是标题,但很多表第 1 行是大标题(合并),第 2 行才是列名 | "标题行在第 2 行,第 1 行是合并的大标题" |
数据起始行 | 如果数据前有空行或说明文字,AI 会从第 2 行开始处理,把空行当数据 | "数据从第 4 行开始,第 3 行是空行分隔" |
金额/日期列的位置 | AI 猜的列号经常不对 | "金额在 D 列,日期在 A 列" |
合并单元格 | 有合并单元格时,AI 代码如果涉及整行操作会报错或行为异常 | "A1:D1 合并,A3:A10 合并" |
公式列 | AI 可能覆盖公式列的值 | "F 列是公式列(=D-E),不要修改" |

⚠️ 坑与排错
如果你遇到…… | 原因 | 解决 |
|---|---|---|
AI 还是写错了列号 | 表结构描述里列号写反了 | 检查"A列是日期"还是"第1列是日期",统一说法 |
AI 代码从第 1 行开始处理,把标题删了 | 没说"标题在第 2 行" | 在提示词里加一句"第 1 行是标题,不要动" |
AI 说"无法访问合并单元格" | 代码试图写入合并区域 | 在表结构里标注合并位置,让 AI 绕开 |
AI 生成的代码能跑但只处理了前 10 行 | AI 假设了固定行数 | 在提示词里写"行数不固定,用 End(xlUp) 找末行" |
📌 本讲小结
你今天学会了 | 对应能力 |
|---|---|
为什么 AI 写的代码会翻车 | 理解"信息差"是报错的根源 |
表结构描述模板 | 给 AI 一份"数据字典" |
完整版 vs 精简版 | 按场景选择描述粒度 |
五个最容易漏的细节 | 标题行位置、数据起始行、列号、合并单元格、公式列 |
描述后 AI 代码的精准度提升 | 从"猜着写"变成"照着写" |
核心认知:AI 不是你肚子里的蛔虫,但它是一个你给它多少信息,它就还你多少精准的超级助手。多花 2 分钟描述表结构,省下 2 小时改代码——这笔账怎么算都值。
📢 下节预告
第 5 讲|批量合并多个工作簿,AI 三句话搞定
前 4 讲你打下了完整基础:会写提示词、会贴代码、认识编辑器、会描述表结构。从第 5 讲开始,进入实战场景篇——每个场景解决一个真实的加班痛点。第一个:领导甩来 20 个文件说"帮我汇总",你不用再复制粘贴到手软。
💬 互动时间
打开你的一个工作表,用今天的模板描述它的结构,把描述贴在评论区。我会帮你看看有没有遗漏的关键信息,或者帮你直接写成完整提示词。
如果你手头正好有个"需要合并多个文件"的需求,也直接说,第 5 讲我们就拿你的真实场景来写。















































































