如何通过Excel单元格引用链接,用Power Query/VBA提取数据表?
方法一:用Power Query动态引用单元格链接
这种方法能直接通过修改LINK工作表里的链接自动更新数据,无需重复创建查询:
- 导入链接列表
切换到LINK工作表,选中A1:A20区域,点击「数据」选项卡→「从表格/区域」,根据实际情况勾选「我的表格有标题」,将列表导入Power Query编辑器。 - 编写自定义函数批量提取
打开「高级编辑器」,替换默认代码为以下内容(注意替换表名和列名:比如导入链接后生成的表叫「表1」、链接列名为「Column1」,需根据实际情况调整):
点击「完成」将数据加载回Excel。后续修改let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 提取数据 = (链接 as text) => let 网页数据 = Web.Contents(链接), 解析数据 = Excel.Workbook(网页数据) in 解析数据{0}[Data], // 默认提取第一个工作表的数据,需调整的话修改索引值 添加自定义列 = Table.AddColumn(源, "月度数据", each 提取数据([Column1])), 展开数据 = Table.ExpandTableColumn(添加自定义列, "月度数据", Table.ColumnNames(添加自定义列[月度数据]{0}), Table.ColumnNames(添加自定义列[月度数据]{0})) in 展开数据LINK工作表中的链接后,右键查询选择「刷新」即可更新数据。 - 降低文件负载
右键查询→「属性」,取消勾选「允许后台刷新」,或设置合适的刷新频率,减少后台资源消耗。
方法二:用VBA批量提取合并数据
适合习惯用宏操作的场景,步骤更直接:
- 打开VBA编辑器
按下Alt + F11打开编辑器,右键点击当前工作簿→「插入」→「模块」。 - 粘贴批量提取代码
将以下代码粘贴到模块中(如需修改结果表名称,把「提取结果」替换成你想要的名称即可):Sub 批量提取月度数据() Dim wsLink As Worksheet, wsResult As Worksheet Dim lastRow As Long, i As Long Dim url As String Dim tempWB As Workbook Set wsLink = ThisWorkbook.Worksheets("LINK") ' 检查结果表是否存在,不存在则新建 On Error Resume Next Set wsResult = ThisWorkbook.Worksheets("提取结果") On Error GoTo 0 If wsResult Is Nothing Then Set wsResult = ThisWorkbook.Worksheets.Add(After:=wsLink) wsResult.Name = "提取结果" End If ' 清空旧数据(保留表头) wsResult.UsedRange.Offset(1).ClearContents lastRow = wsLink.Cells(wsLink.Rows.Count, "A").End(xlUp).Row ' 循环处理每个链接 For i = 1 To lastRow url = wsLink.Cells(i, "A").Value If url <> "" Then Set tempWB = Workbooks.Open(url) ' 复制第一个工作表的所有数据到结果表 tempWB.Sheets(1).UsedRange.Copy wsResult.Cells(wsResult.Rows.Count, "A").End(xlUp).Offset(1) tempWB.Close SaveChanges:=False End If Next i MsgBox "数据提取完成!" End Sub - 运行宏
返回Excel按下Alt + F8,选择「批量提取月度数据」点击「执行」即可。修改链接后重新运行宏就能更新数据。
内容的提问来源于stack exchange,提问作者S. Shotez
相关产品推荐
相关产品推荐

