excel - 使用 Excel 数据搜索网站以提取结果,然后循环
问题描述
我在 Excel 电子表格中有 8000 个值。
我需要搜索一个网站,然后将网站上的特定数据行记录到 Excel 电子表格中。
我找到了搜索数据excel 宏以搜索网站并提取结果的代码
Sub URL_Get_ABN_Query()
strSearch = Range("a1")
With ActiveSheet.QueryTables.Add( _
Connection:="URL;http://www.abr.business.gov.au/SearchByABN.aspx?SearchText=" & _
strSearch & "&safe=active", _
Destination:=Range("a5"))
.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=False
.SaveData = True
End With
'enter code here
End Sub
我只想要“实体类型”数据线。
我找不到如何将代码扩展为只抓取这一行并输入到相应的单元格。即ABN(b2)search,找到输入'entity type'并粘贴到Company Type(c2)中。
或者,我试图找到如何垂直而不是水平地填充信息。我可以删除不需要的列。我认为这可能更简单。
我试图与开发人员一起录制宏。
我还需要循环到下一个 ABN 并填充相应的字段等等(B3>C3、B4>C4 等)。
解决方案
这是绝对可能的。你有我经常发现的最困难的部分,从另一个平台获取信息。为了完成这项工作,我会将它分开一点,为简单起见,使用 2 张工作表(Sheet1 包含您的已知数据,Sheet2 用于 Web 数据)。
循环浏览您的约 8000 家企业表。我们可以从 UsedRange 的行数中识别这一点。我们知道 ABN 在第 2 列(也称为 B)中,因此我们将其复制到变量中以传递给函数。该函数将“实体类型:”返回到同一行的第 3 (C) 列。
Sub LoopThroughBusinesses()
Dim i As Integer
Dim ABN As String
For i = 2 To Sheet1.UsedRange.Rows.Count
ABN = Sheet1.Cells(i, 2)
Sheet1.Cells(i, 3) = URL_Get_ABN_Query(ABN)
Next i
End Sub
将您创建的子例程更改为函数,以便它返回您所追求的实体类型。该函数会将数据保存到 Sheet2 中,然后只返回我们需要的实体数据。
Function URL_Get_ABN_Query(strSearch As String) As String ' Change it from a Sub to a Function that returns the desired string
' strSearch = Range("a1") ' This is now passed as a parameter into the Function
Dim entityRange As Range
With Sheet2.QueryTables.Add( _
Connection:="URL;http://www.abr.business.gov.au/SearchByABN.aspx?SearchText=" & strSearch & "&safe=active", _
Destination:=Sheet2.Range("A1")) ' Change this destination to Sheet2
.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=False
.SaveData = True
End With
' Find the Range that has "Entity Type:"
Set entityRange = Sheet2.UsedRange.Find("Entity type:")
' Then return the value of the cell to its' right
URL_Get_ABN_Query = entityRange.Offset(0, 1).Value2
' Clear Sheet2 for the next run
Sheet2.UsedRange.Delete
End Function
推荐阅读
- sql - 从 SQL 查询中测量 ResultSet 的时间性能
- amazon-web-services - S3 批处理操作 - 可以避免 lambda 调用之间的长时间延迟吗?
- ruby-on-rails - 在另一个别名中使用 Ransack 别名
- reactjs - 如何在不使用 React 保持滚动位置的情况下转到另一个页面
- reactjs - 反应变量未更新
- android-ndk - 如何为 android 编译铬版本的 bsdiff
- javascript - 如何在函数中返回从 promise 解析的值?
- webrtc - 如何使用 janus webrtc 将屏幕与视频共享为本地流
- c++ - 从计算着色器更新顶点
- javascript - Node.JS SyntaxError:JSON 中第 20 位的意外标记 i