Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 Pro : Excel 2013)
ChromeをつかってVBAでWebからデータを取得する方法
投稿日時: 21/08/22 16:18:52
投稿者: sucer

VBAでobjIEをつかってhtml.Document中のTABLE データ取り出し、TRで改行、TDの中身をExcelワークシート中に取り出していくプログラムを使っていました。下が参考に使っていたコードです。
 
 
'TagName <TR>で改行 <TD>でデータセットしてみる
 
'TABLE データ取り出し、TRで改行、TDの中身をセットする
 
 
Sub ie_test_Document_All_TagName_TR_TD()
 
 '参照先 http://www.ken3.org/cgi-bin/group/vba_ie_document.asp
 
    Dim x As Integer, y As Integer '列と行カウンター
     
    Dim objIE As Object 'IEオブジェクト参照用
    Dim objTAG As Object '1つ1つ タグのオブジェクトを入れる
    Dim strTNAME As String 'タグの名前を保存する
     
    Set objIE = CreateObject("InternetExplorer.application")
    objIE.Visible = True
 
    '.Navigate で 指定した文字列のURLを開く
    objIE.Navigate "http://www.ken3.org/cgi-bin/test/test028-2.asp"
 
    Do While objIE.ReadyState <> 4
     DoEvents
    Loop
 
 
    '新規のブックを追加して、.InnerTEXTを吐き出す
    Workbooks.Add '新規ブックを追加
     
    y = 0 '行カウンターを初期化(はじめの改行で+1するので0から)
    x = 0 '列カウンターを初期化(TR 改行時に初期化するのでいらないんだけど)
     
    'Documentから.TagNameでTR TD THを判断して テキスト(.InnerText)を書き出す
    For Each objTAG In objIE.Document.all
         
        strTNAME = objTAG.TagName 'タグの名前を変数へ保存
         
        If strTNAME = "TR" Then 'TR行の開始なら
            y = y + 1 '行開始なので 行カウンターを+1
            x = 0 '列を0(頭)初期化
        End If
             
        If strTNAME = "TH" Or strTNAME = "TD" Then 'TH見出し TDデータ
            x = x + 1 '列カウンターを+1
            Cells(y, x) = "'" & objTAG.InnerText '.InnerTextをセットする
        End If
         
    Next

 
    objIE.Quit
    Set objIE = Nothing
 
End Sub
 
 
 このコードでobjIEを使わずにChromeをつかって同様にデータを取り出すにはどういったコードにしてらよいでしょうか?
VBAでCromeを使うためのドライバのインストールとSelenium Type Libraryを参照設定してあります。
 
 分かる方おられましたら教えてください。
 
 よろしくお願いします。
 

回答
投稿日時: 21/08/22 18:47:07
投稿者: taitani

1.Excel起動
2.データタブ「Webから」
3."http://www.ken3.org/cgi-bin/test/test028-2.asp"を貼り付けて取得
4.table から取得
上記でデータ抜けませんか?

投稿日時: 21/08/22 19:57:21
投稿者: sucer

 taitaniさん返信ありがとうございます。
 
 1つのURLのみデータを取得するのではなく別のURLも連続的に処理していきたいのでVBAを使った処理が知りたいです。
 
 Sub ie_test_Document_All_TagName_TR_TD()のケースをCromeを使う場合は太字の部分をどういったコードを書いたら良いのでしょうか。
 
 分かる方おられました教えてください。
 
 よろしくお願いします。

回答
投稿日時: 21/08/22 20:55:45
投稿者: simple

私も「データの取得と変換」にある旧Webクエリが簡便だと思います。
無論、マクロ化が可能です。(また情報が豊富にネット上にあります)
 
どうしてもSeleniumBasicを使ったアクセスをということであれば、
インストールしたフォルダにある、Selenium.chmというヘルプファイルを
ご覧になることをお薦めします。(これが原典ですから。)
 
例えば、こんなコードではいかがでしょう。

Sub test()
    Dim driver As Selenium.WebDriver
    Dim url As String
    Dim data

    url = "http://www.ken3.org/cgi-bin/test/test028-2.asp"

    Set driver = New Selenium.WebDriver
    driver.Start "chrome", url
    driver.Get url

    '配列data にテーブル内容を取得(dataを自由に加工可能)
    data = driver.FindElementByTag("table").AsTable.data
    
    'または、テーブル内容を指定セル範囲に書き込む
    driver.FindElementByTag("table").AsTable.ToExcel [Sheet1!A1]
End Sub

# ヘルプだけしか見ていませんが、ネット上を検索すればいろいろな情報が
# たぶんあるはずです。調べて見て下さい。

投稿日時: 21/08/23 04:06:52
投稿者: sucer

simpleさん、返信ありがとうございます。
 
simpleさんに教えていただいたコードとヘルプをどっかかりに自分でやってみたいと思います。
 
朝から仕事なのに早朝から目が覚めてしまったのでこれからやってみます。
 
仕事から帰宅するまで体力もつかな。・・・ちょっと心配です。
 
 
どうも有難うございました。
 
助かりました。