DeepSeek风风火火呼啸而来,各方面应用缤纷异彩。下面介绍一个如何利用DeepSeek快速进行订单开票回款对账,几步获取准确自动化代码。
示例数据如下,工作簿中有两个表:开票信息和收款信息。
将这个Excel文件上传到DeepSeek,会先展示一点DeepSeek的思考过程及相关信息,感兴趣的可以先阅读一下这些信息。
我们的任务是要核对这两个表,因此输入提示词“请对开票信息表和收款信息表按客户和订单号进行核对,制作全部客户、全部订单的对账单,要求生成的对账是全部数据”,就得到下面的下面结果及说明。
可惜的是,由于数据较多,DeepSeek会说,因篇幅限制,此处仅列关键示例,因此,我们无法获取全部客户全部订单的对账结果。
不过,我们请求DeepSeek,询问哪种工具和方法在制作对账单核对数据最高效,以便于制作完整的对账单,输入提示词“请问哪种工具和方法在制作对账单核对数据最高效?注意是全部客户全部订单,不能有遗漏”,DeepSeek会给出以下几种可选工具:
1. Excel + Power Query(推荐)
2. Python(Pandas库)
3. 数据库工具(SQL + ETL)
4. ERP/财务系统(如SAP、用友)
如果你觉得上述的Power Query方法还是很啰嗦且麻烦,想要一键完成对账,不妨寻求DeepSeek提供Excel VBA代码。
输入提示词“我觉得这些方法还是比较麻烦的,请给出能够一键制作对账单的Excel VB代码”,就会得到下面的Excel VBA代码,
按照DeepSeek提供的操作说明,将代码复制到Excel文件中,运行程序,先看看能否正常运行,并验证结果是否正确。
但是,浏览代码后,发现这个代码看起来很帅繁琐,不简洁,可以继续提问,输入提示词“这个代码太繁琐了,有没有更简洁的VBA代码?注意开票信息表中,A列是客户名称,B列是订单号,H列是要核对的开票金额;收款信息表中,B列是客户名称,C列是订单号,D列是要核对的收款金额;请根据这个具体表格结构,给出简洁的VBA代码”,把问题具体化,给出具体的核对字段所在列,那么DeepSeek就给出了简化的VBA代码:
将这个代码复制到Excel中,运行会出现错误,检查代码,就会发现错误点出现在变量“key”上:
也就是说,由于变量key被声明为了字符串变量,但在程序中却是以对象变量来使用,因而出现了错误,这样,就需要继续寻求DeepSeek帮助,输入提示词“代码运行错误,说key必须是变体变量,请修改代码”,就得到修改后的VBA代码:
将这个代码复制到Excel并运行,就得到了正确结果:
下面是针对这个对账表格的完整VBA代码,复制下来以供参考:
Sub GenerateReconciliationReport()
Dim wsInv As Worksheet, wsPay As Worksheet, wsRpt As Worksheet
Dim dictInv As Object, dictPay As Object
Dim key As Variant ' 修改:将 key 声明为 Variant 类型
Dim arrInv, arrPay, arrRpt()
Application.DisplayAlerts = False
Application.DisplayAlerts = True
Set wsInv = Sheets("开票信息")
Set wsPay = Sheets("收款信息")
Set wsRpt = Sheets.Add(After:=Sheets(Sheets.Count))
Set dictInv = CreateObject("Scripting.Dictionary")
Set dictPay = CreateObject("Scripting.Dictionary")
' 读取并汇总开票金额(A列客户名称,B列订单号,H列金额)
arrInv = .Range("A2:H" & .Cells(.Rows.Count, "A").End(xlUp).Row).Value
For i = 1 To UBound(arrInv, 1)
key = Trim(arrInv(i, 1)) & "|" & Trim(arrInv(i, 2)) ' 生成唯一键
If dictInv.Exists(key) Then
dictInv(key) = dictInv(key) + arrInv(i, 8) ' H列是第8列
dictInv.Add key, arrInv(i, 8)
' 读取并汇总收款金额(B列客户名称,C列订单号,D列金额)
arrPay = .Range("B2:D" & .Cells(.Rows.Count, "B").End(xlUp).Row).Value
For i = 1 To UBound(arrPay, 1)
key = Trim(arrPay(i, 1)) & "|" & Trim(arrPay(i, 2)) ' 生成唯一键
If dictPay.Exists(key) Then
dictPay(key) = dictPay(key) + arrPay(i, 3) ' D列是第3列
dictPay.Add key, arrPay(i, 3)
ReDim arrRpt(1 To dictInv.Count + 1, 1 To 6)
For Each key In dictInv.Keys
arrRpt(r, 1) = Split(key, "|")(0) ' 拆分客户名称
arrRpt(r, 2) = Split(key, "|")(1) ' 拆分订单号
arrRpt(r, 3) = dictInv(key) ' 总开票金额
arrRpt(r, 4) = 0 ' 默认收款金额为0
If dictPay.Exists(key) Then
arrRpt(r, 4) = dictPay(key) ' 存在收款记录则更新
arrRpt(r, 5) = arrRpt(r, 3) - arrRpt(r, 4) ' 计算差额
arrRpt(r, 6) = IIf(arrRpt(r, 5) = 0, "已结清", IIf(arrRpt(r, 4) = 0, "未收款", "部分收款"))
.Range("A1:F" & r).Value = arrRpt
.Range("A1:F1").Font.Bold = True ' 表头加粗
.Columns("C:F").NumberFormat = "#,##0.00" ' 金额格式化
.Columns("A:F").AutoFit ' 自动调整列宽
.Range("A1:F1").Interior.Color = RGB(220, 230, 241) ' 表头背景色
MsgBox "对账单生成完成!", vbInformation
我个人觉得,很多情况下,DeepSeek提供的Excel VBA代码并不简洁,某些情况下甚至是不可行的,因为这样的代码可能不是针对这个具体表格设计的,因此很多情况下需要验证代码的可行性,去编辑加工代码。另外,为了节省代码调试时间,给出具体准确的表格结构及条件,则是至关重要的。