3

データの抽出に関心のあるWebページには、複数の検索フィールドを含むテーブルがあります。これらのフィールドのいずれかにデータを入力し、表の下部にある検索ボタンをクリックして、検索したい情報に基づいた結果を表示できます。

検索したい番号が複数あります(約300)。これらを個別に検索する代わりに、データの検索を自動化し、検索したい番号ごとにデータをExcelワークシートにインポートする方法はありますか?

Excelマクロを使用することは可能ですか?

4

1 に答える 1

1

これには、MSXMLおよびMSHTMLライブラリを使用できます。このコードで始めることができます。
このサブを実行して両方の参照を追加することから始めます(これを実行する必要があるのは1回だけです)。

Sub addReferences()
    ActiveWorkbook.VBProject.References.AddFromGuid "{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}", 4, 0
    ActiveWorkbook.VBProject.References.AddFromGuid "{F5078F18-C551-11D3-89B9-0000F81FE221}", 6, 0
End Sub

次に、サブを編集しgetCAGEValuesてCAGEコードをインポートし、結果のデータ(およびページから必要な追加データ)を保存します。

Sub getCAGEValues()
    Dim oHTMLDoc As MSHTML.HTMLDocument
    Dim oSpan As MSHTML.HTMLGenericElement
    Dim CAGECodes() As Variant
    CAGECodes = Array("12345", "12346") 'CAGECodes is an array of your codes'
    For Each CAGECode In CAGECodes
        Set oHTMLDoc = getPage(CAGECode)
        Set oSpan = oHTMLDoc.getElementById("ctl00_cphMainPageBody_lblCompNameData") 'The id for the company name'
        MsgBox oSpan.innerText 'Save the value however you want to.'
    Next
End Sub

Function getPage(CAGECode As Variant) As MSHTML.HTMLDocument
    Dim oHttpRequest As MSXML2.XMLHTTP60
    Set oHttpRequest = New MSXML2.XMLHTTP60
    With oHttpRequest
        .Open "GET", "http://www.logisticsinformationservice.dla.mil/BINCS/details.aspx?CAGE=" & CAGECode, False
        .setRequestHeader "Cache-Control", "no-cache"
        .setRequestHeader "Pragma", "no-cache"
        .setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
        .send
    End With
    Dim oHTMLDoc As MSHTML.HTMLDocument
    Set oHTMLDoc = New MSHTML.HTMLDocument
    oHTMLDoc.body.innerHTML = oHttpRequest.responseText
    Set getPage = oHTMLDoc
End Function
于 2012-11-13T18:55:43.017 に答える