三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

QA0816 004 1R〜12Rまでの飛び先を調べセルに書き出す

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

VBAIEのリンク操作は http://www.ken3.org/cgi-bin/group/vba_ie_link.asp を見てください。

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



Googleを使用して検索する

読者の声:三流君の説明・解説じゃ よくわからなかったから、Googleを使って、自分で検索します。
三流君:残念です。あっ、下記にGoogleの検索窓を設置しました。
いろいろ指定して試してみてください。

Google
探す言葉:気になる単語や,オブジェクト(Document),プロパティ(.Busy)やメソッド(.Navigate)などを入れて検索してみてください。


言語を指定:見つからない時は指定無しで探す

サイト指定:人気QAサイト や 一次情報MS本家を指定する
一次情報・二次情報まとめから探る
QAサイトの質問から探る
検索実行: ←オプション確認後に検索ボタンを押してください

期間指定:情報の鮮度も大切?
検索実行: ←オプション確認後に検索ボタンを押してください


本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)