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测试:
- 第一个URL的数据会从B列的起始位置开始存入
- 第二个URL的数据会自动接在第一个数据的最后一行下方,不会跑到C列
内容的提问来源于stack exchange,提问作者Excelhelp4
相关产品推荐
相关产品推荐

