www.youtube.com
http://www.youtube.com/watch?v=VGXOhq0ddS0
今回のソースと解説は http://ken3-info.blog.ocn.ne.jp/objie/2009/08/ie_url_c90d.html を 見て笑ってください。。。
やっと、最終段階
>3.そのリンク先に飛び
>1R〜12Rまでのリンクを取り出し、シートに書き込む。
です。
各レースを処理してみたいと思います。
1回札幌5日
http://keiba.yahoo.co.jp/scores/2009/01/01/05/racelist.html
で、
1R http://keiba.yahoo.co.jp/scores/2009/01/01/05/01/result.html
2R http://keiba.yahoo.co.jp/scores/2009/01/01/05/02/result.html
3R http://keiba.yahoo.co.jp/scores/2009/01/01/05/03/result.html
となってます。
規則性があるので、
1R の http://keiba.yahoo.co.jp/scores/2009/01/01/05/01/result.html
を作るために
開催日のURL http://keiba.yahoo.co.jp/scores/2009/01/01/05/racelist.html
のracelist.htmlを消して、01/result.htmlを追加したいと思います。
Dim strWORK As String '変数を定義します。
strWORK = Replace(strURL, "racelist.html", "") '後ろのURLをカット
strWORK = strWORK & "01/result.html" 'これで1RのURL作成
↑こんな感じで、1RのURLを作りました。
あとは、作った1Rに飛んで、2R-12Rまでのリンクを同じように後ろがRのデータで処理してみます。
少し長いけど、全体含め、こんな感じです。
Option Explicit
Dim SET_YLINE As Integer 'グローバル変数に行数を保存
Sub testmain()
SET_YLINE = 2 'A2から書きたいので、2
Call yyyy_mm(2009, 7)
End Sub
'年と月を受け取り、開催日・場所単位で処理する。
Sub yyyy_mm(yyyy As Integer, mm As Integer)
Dim strURL As String '受け取った引数からURLを作成
'例)http://keiba.yahoo.co.jp/schedule/2009/08/
strURL = "http://keiba.yahoo.co.jp/schedule/" & yyyy & "/" & Right("0" & mm, 2) & "/"
'IEの起動
Dim objIE As Object '変数を定義します。
Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
objIE.Visible = True '可視、Trueで見えるようにします。
'表示位置(左上の座標)とサイズ(高さ・幅)を調整する
objIE.FullScreen = False '※Trueのモードだとびっくりするよ
objIE.Top = 100 '左上 上位置
objIE.Left = 100 '左上 左位置
objIE.Width = 800 '横幅
objIE.Height = 600 '高さ
'処理したいページを表示します。
objIE.Navigate strURL '.Navigate メソッドで競馬の開催日を表示する。
'ページの表示完了を待ちます。
While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
DoEvents '重いので嫌いな人居るけど。
Wend
'リンク情報を取り出す
Dim i As Integer 'ループの変数
For i = 0 To objIE.Document.Links.Length - 1
If Right(objIE.Document.Links(i).InnerText, 1) = "日" Then
'開催日のページを渡す。
Cells(SET_YLINE, "B") = objIE.Document.Links(i).InnerText
Call get_racelist(objIE.Document.Links(i).Href) 'リンク先
Debug.Print objIE.Document.Links(i).InnerText '内側のテキスト
End If
Next i
'IEを閉じる
objIE.Quit
Set objIE = Nothing
MsgBox "終了しました"
End Sub
'開催日のURLを受け取り 例)http://keiba.yahoo.co.jp/scores/2009/01/01/05/racelist.html
'1R-12RまでのURLを セルに書き出す
Sub get_racelist(strURL As String)
'IEの起動
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
objIE.Visible = True '可視、Trueで見えるようにします。
'表示位置(左上の座標)とサイズ(高さ・幅)を調整する
objIE.FullScreen = False '※Trueのモードだとびっくりするよ
objIE.Top = 150 '左上 上位置
objIE.Left = 150 '左上 左位置
objIE.Width = 800 '横幅
objIE.Height = 600 '高さ
'処理したいページを表示します。
Dim strWORK As String '変数を定義します。
strWORK = Replace(strURL, "racelist.html", "") '後ろのURLをカット
strWORK = strWORK & "01/result.html" 'これで1RのURL作成
'↑作った1Rを書き込む
Cells(SET_YLINE, "A") = strWORK '結果を書き込む
SET_YLINE = SET_YLINE + 1
objIE.Navigate strWORK '.Navigate メソッドで1Rに飛ぶ
'ページの表示完了を待ちます。
While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
DoEvents '重いので嫌いな人居るけど。
Wend
'リンク情報を取り出す
Dim i As Integer 'ループの変数
For i = 0 To objIE.Document.Links.Length - 1
If Right(objIE.Document.Links(i).InnerText, 1) = "R" Then
'結果の書き込み
Cells(SET_YLINE, "A") = objIE.Document.Links(i).Href '結果を書き込む
Cells(SET_YLINE, "B") = objIE.Document.Links(i).InnerText
SET_YLINE = SET_YLINE + 1
Debug.Print objIE.Document.Links(i).Href 'リンク先
End If
Next i
'IEを閉じる
objIE.Quit
Set objIE = Nothing
End Sub
あっ、
>アドレスをコピー貼り付けでも3年分は、すごい量があります
>マクロでシート6のセルA2から3年分のアドレスだけ
シート6の選択と、繰り返しを行わなきゃなぁ・・・
Sub main_all()
'シート6を選択
Sheets("Sheet6").Select
Range("A1").Select
SET_YLINE = 2 'A2から書きたいので、グローバル変数を初期化
Dim mm As Integer
'2006年
For mm = 1 To 12
Call yyyy_mm(2006, mm) '月別の取得関数
Next mm
'2007年
For mm = 1 To 12
Call yyyy_mm(2007, mm) '月別の取得関数
Next mm
'2008年
For mm = 1 To 12
Call yyyy_mm(2008, mm) '月別の取得関数
Next mm
'2009年
For mm = 1 To 12
Call yyyy_mm(2009, mm) '月別の取得関数
Next mm
End Sub
ついでに、単独のヤツも付けてみました。
Sub main_tan()
Dim strYYYY As String
Dim strMM As String
Dim mm As Integer
Dim yyyy As Integer
'入力
strYYYY = InputBox("調べたい年を西暦で入力", "年", "2009")
strMM = InputBox("調べたい月を1-12で入力", "月", "1")
'数値変換
yyyy = CInt(strYYYY)
mm = CInt(strMM)
'シート6を選択
Sheets("Sheet6").Select
Range("A1").Select
SET_YLINE = 2 'A2から書きたいので、グローバル変数を初期化
Call yyyy_mm(2009, mm) '月別の取得関数
End Sub
思った以上に、かかってしまった・・・少々反省・・・
QA0816 VBA IE操作 リンク先URL取得 三流君 試行錯誤 objIE Document.Links .Href .InnerText
VBAでIEのリンク操作は http://www.ken3.org/cgi-bin/group/vba_ie_link.asp を見てください。