Deepseek写的万能提取函数,能抓取任一文件任一表格任一项目数据

360影视 动漫周边 2025-06-02 11:28 4

摘要:如果还是不出所料,你应该是逐个打开表格复制数据粘到汇总表中。找到文件 - 逐个打开 - 找到资产负债表 - 逐个复制粘贴,如果一年12个月报告,就取一个数估计你就要几分钟内时间。

如果不出所料,你的Excel表格资料应该也是按年/月/公司等类别分别存放的吧。如下面各月财务报表:

这样存放表格,会给将来制作汇总报表带来麻烦。比如你想取每个月的资产负债表中的应收账款数据。

如果还是不出所料,你应该是逐个打开表格复制数据粘到汇总表中。找到文件 - 逐个打开 - 找到资产负债表 - 逐个复制粘贴,如果一年12个月报告,就取一个数估计你就要几分钟内时间。

为了解决这个难题,给Deepseek发了一个指令:

帮编写一个VBA自定义函数,可以不打开excel文件,就可以从其工作簿提取指定工作表指定值后面第N列的数据,=Quzhi(路径工作簿名称,工作表名称,指定的值,N)其中N是指定的值右边第N列

很快Deepseek帮我写了一个自定义函数

代码:

Function Quzhi(文件路径 As String, 工作表名称 As String, 查找值 As Variant, N As Integer) As Variant On Error GoTo ErrorHandler Dim conn As Object, rs As Object Dim strConn As String, strSQL As String Dim targetIndex As Integer, i As Integer ' 创建数据库连接 Set conn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") ' 构建连接字符串 strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & 文件路径 & ";" & _ "Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";" ' 打开数据库连接 conn.Open strConn ' 构建SQL查询语句 strSQL = "SELECT * FROM [" & 工作表名称 & "$]" ' 执行查询并获取记录集 rs.Open strSQL, conn, 3, 1 ' 遍历记录集查找目标值 Do Until rs.EOF For i = 0 To rs.Fields.Count - 1 If Not IsNull(rs.Fields(i).Value) Then If CStr(rs.Fields(i).Value) = CStr(查找值) Then targetIndex = i + N If targetIndex >= rs.Fields.Count Then Quzhi = CVErr(xlErrRef) Exit Function End If Quzhi = rs.Fields(targetIndex).Value GoTo CleanUp End If End If Next i rs.MoveNext Loop ' 未找到值时返回错误 Quzhi = CVErr(xlErrValue)CleanUp: ' 清理对象资源 If Not rs Is Nothing Then If rs.State = 1 Then rs.Close Set rs = Nothing End If If Not conn Is Nothing Then If conn.State = 1 Then conn.Close Set conn = Nothing End If Exit FunctionErrorHandler: Quzhi = CVErr(xlErrValue) Resume CleanUpEnd Function

把它粘到VBE编辑器的模块中(开发工具 - Visual Basic - 插入 - 模块,WPS:工具 - 开发工具 -VB编辑器)

接下来就是见证奇迹的时刻了。输入以下公式,不需要打开文件就可以直接提取应1月收账款的数据了。

=--quzhi("D:\三大报表\财务报表"&C$3&".xlsx","资产负债表",$B4,2)

公式说明:第一个参数是表格路径,第二个参数是从哪个表提取,第三个参数是提取项目,第4个参数是项目右边第几列的值(和Vlookup第3个参数有点像)。两个--是为了把提取的值变成数字。

也许你会说编代码的功夫我都手工粘贴早就完了,嘿嘿,写公式的好处就是可以大批量提取数据。把公式一改,一拖一拉,多个月份多个资产项目的值全都自动提取完成

=--quzhi("D:\三大报表\财务报表"&C$3&".xlsx","资产负债表",$B6,2)

注:把文件名中的月份引用标题行中的月份

输入新的项目,也是自动提取

总结:用这个函数你可以不打开源文件,从任一Excel文件,任一工作表中提取任一项目(你不需要知道这个项目在哪一行哪一列)后第N列的数据。

注意:记得把当前的excel文件另存为启用宏的工作簿(另存为 - 文件类型选启用宏的excel工作簿)

来源:感知引擎

相关推荐