You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA网页抓取:如何将多URL数据存入同一列

解决Excel VBA抓取数据到同一列的问题

没问题,我帮你调整这段代码,让所有URL抓取的数据都依次存到B列,紧接上一个数据的下方。

原代码问题分析

你当前的代码里,Destination:=Range("B" & Erw) 是把每个URL的数据放到A列对应行的B列位置。当第一个URL抓取的数据占了多行后,第二个URL的目标位置(比如B2)已经被占用,QueryTable就会自动把数据放到下一列(C列),这就是为什么每个URL的数据在单独列的原因。

修改后的代码

Sub WebScraping()
    Dim Erw, Frw, Lrw As Long
    Dim nextRow As Long ' 用于跟踪B列下一个空行的位置
    
    Frw = 1
    Lrw = Range("A" & Rows.Count).End(xlUp).Row
    
    For Erw = Frw To Lrw
        ' 计算B列下一个空行的位置
        If ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row = 1 And ActiveSheet.Cells(1, "B").Value = "" Then
            nextRow = 1 ' 如果B列是空的,从第1行开始
        Else
            nextRow = ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Row + 1 ' 否则从最后一行的下一行开始
        End If
        
        With ActiveSheet.QueryTables.Add(Connection:= _
            "URL;" & Range("A" & Erw).Value, Destination:=Range("B" & nextRow))
            .Name = ""
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlInsertDeleteCells ' 保持插入模式,避免覆盖已有数据
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .WebSelectionType = xlEntirePage
            .WebFormatting = xlWebFormattingNone
            .WebPreFormattedTextToColumns = True
            .WebConsecutiveDelimitersAsOne = True
            .WebSingleBlockTextImport = False
            .WebDisableDateRecognition = False
            .WebDisableRedirections = False
            .Refresh BackgroundQuery:=False
            
            ' 刷新后删除QueryTable,避免重复创建
            .Delete
        End With
    Next Erw
End Sub

关键改动说明

  • 新增nextRow变量:每次循环前计算B列的下一个空行位置,确保新数据存到正确的地方
  • 修改Destination为Range("B" & nextRow):把每个URL的数据都放到B列的最新空行,而不是A列对应的行
  • 增加QueryTable.Delete:每次抓取完成后删除临时创建的QueryTable,避免工作表里积累大量无用的QueryTable对象

测试建议

你可以用提供的两个URL测试:

  1. 第一个URL的数据会从B列的起始位置开始存入
  2. 第二个URL的数据会自动接在第一个数据的最后一行下方,不会跑到C列

内容的提问来源于stack exchange,提问作者Excelhelp4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:35:57