夜雨聆风学习资料网

ARTICLE · 1341533

用 AI 写 Excel VBA ④:先描述表结构,再让 AI 动笔

用 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 Worksheet    Dim lastRow As Long, i As Long    Dim markedCount As Long    Dim amount As Double    On Error GoTo ErrorHandler    Application.ScreenUpdating = False    Set ws = ThisWorkbook.Sheets("销售数据")    '找末行(用D列)    lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row    '先清掉原有颜色(从数据行开始)    ws.Range("A3:G" & lastRow).Interior.ColorIndex = xlNone    '逐行检查    markedCount = 0    For i = 3 To lastRow        '读取D列金额(跳过空值)        If IsNumeric(ws.Cells(i, "D").Value) Then            amount = ws.Cells(i, "D").Value            '判断是否大于10000            If amount > 10000 Then                '标浅红色(整行从A到G)                ws.Range("A" & i & ":G" & i).Interior.Color = RGB(255, 200, 200)                markedCount = markedCount + 1            End If        End If    Next i    Application.ScreenUpdating = True    '报告结果    MsgBox "标记完成!共 " & markedCount & " 行金额大于10000,已标为浅红色。", vbInformation    Exit SubErrorHandler:    Application.ScreenUpdating = True    MsgBox "运行出错:" & 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 讲我们就拿你的真实场景来写。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料