こんにちは、VBAを勉強していて、もう何時間も同じところで躓いており、お力をおかしいただけたらと思います。
EXCELのシートC2から下に向け100前後のURL一覧があり、各URLを開いて情報を取得しています。開くURLを直接書き込むやり方だとなんとか取れたのですが、これだと各URLをいちいち書き込まなければならず、煩雑です・・。なのでURLを書き込まず変数などにして、各URLに対して情報取得を一括でできないかと思っています。
●●できているマクロ(開くURLを直接書いているもの)●●
サブルーティンを3つつけ、一番下にメインをかいてあります。これらは本4冊とWEBの情報を参考になんとかここまではできました。
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If
'----------------------------------------------------------------
'①指定URLを表示するサブルーチン「ieView」
Sub ieView(objIE As InternetExplorer, _
urlName As String, _
Optional viewFlg As Boolean = True)
'IE(InternetExplorer)のオブジェクトを作成する
Set objIE = CreateObject("InternetExplorer.Application")
'IE(InternetExplorer)を表示・非表示
objIE.Visible = viewFlg
'指定したURLのページを表示する
objIE.navigate urlName
'IEが完全表示されるまで待機
Call ieCheck(objIE)
End Sub
'----------------------------------------------------------------
'②Webページ完全読込待機処理サブルーチン「ieCheck」
Sub ieCheck(objIE As InternetExplorer)
Dim timeOut As Date
timeOut = Now + TimeSerial(0, 0, 20)
Do While objIE.Busy = True Or objIE.readyState <> 4
DoEvents
Sleep 1
If Now > timeOut Then
objIE.Refresh
timeOut = Now + TimeSerial(0, 0, 20)
End If
Loop
timeOut = Now + TimeSerial(0, 0, 20)
Do While objIE.document.readyState <> "complete"
DoEvents
Sleep 1
If Now > timeOut Then
objIE.Refresh
timeOut = Now + TimeSerial(0, 0, 20)
End If
Loop
End Sub
'②お気に入りやアクセス数を変数にするもの
Function classValue(objIE As InternetExplorer, _
className As String, _
tagName As String, _
valueType As String) As String
For Each objDoc In objIE.document.getElementsByClassName(className)
With objDoc If LCase(.nodeName) = tagName Then Select Case valueType Case "innerHTML" classValue = .innerHTML Case "innerText" classValue = .innerText Case "outerHTML" classValue = .outerHTML Case "outerText" classValue = .outerText End Select Exit For End If End With
Next
End Function
'メインここから----------------------------------------------------------------
Sub sample()
Dim objIE As InternetExplorer
'本サイトをIE(InternetExplorer)で起動
Call ieView(objIE, "https://www.111.com/news/22831458/")
'Aデータを抽出しI2へ
Range("I2").Value = objIE.document.getElementById("tabmenu_inqcnt").innerText
'Bデータを抽出しG2へ
Range("G2").Value = classValue(objIE, "ac_count", "span", "innerText")
'Cデータを抽出しH2へ
Range("H2").Value = classValue(objIE, "fav_count", "span", "innerText")
'画像ファイル名を抽出しK2へ
Range("K2").Value = objIE.document.images(58).src
End Sub
###試したこと
https://qiita.com/Nao3/items/37f84f1777cd8229b915
↑この情報をもとに書き換えるも、うまく動作せず。
###完成イメージ
URLを開くところから各情報取得→各セルへのインプットまでをループにして、URL一覧がなくなったら終了という形にしたいです。あとループにした場合、データ抽出部分をどのように書き換えるかもわからず苦戦しております・・
お力をお貸しいただけたらと思います。どうぞ宜しくお願いいたします。
###補足情報(EXCEL2016,Windows10,64bit )

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/03 23:42