ここから本文です

vba プログラムの質問です。 webクエリーの勉強を始めました。

par********さん

2017/1/1501:37:09

vba プログラムの質問です。
webクエリーの勉強を始めました。

やりたいことは、JRA(http://www.jra.go.jp/keiba/)を開き「出馬表」をクリックして、開かれたページの「今週の出馬表」のテーブルをエクセルのシート(シート名:開催情報)へ取り込みたい、です。

勉強を始めたばかりなので、できればコードを書いてもらい、それを参考(基礎にして)にあれこれとチャレンジしていきたいと思っております。
なので、そのものズバリのコードが希望です。
(実は参考のurlを貼り付けてもらっても、なかなかゴール出来ないのが現状なもので・・・)

windows10,エクセル2010 です。

今までは下記のコードでページ全体をコピペしていました。
今回はwebクエリーでやりたいと思います。
よろしくお願いします。

Sub 開催情報取得()
Dim objIE
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.navigate "http://www.jra.go.jp/keiba/"
While objIE.readyState <> 4 Or objIE.Busy = True
DoEvents
Wend
Sleep (2000)

Call IE_A_Click(objIE, "出馬表")
While objIE.readyState <> 4 Or objIE.Busy = True
DoEvents
Wend
Sleep (2000)
'-------------------------------
With objIE
.ExecWB 17, 2, 0, 0
.ExecWB 12, 2, 0, 0
End With
Sheets("開催情報").Select
Range("a1").Select
ActiveSheet.PasteSpecial Format:="HTML", Link:=False, DisplayAsIcon:= _
False, NoHTMLFormatting:=True

End Sub

Sub IE_A_Click(oIE, sHTML)
Set objA = oIE.Document.getElementsByTagName("A")
For n = 0 To objA.Length - 1
If InStr(objA(n).OuterHTML, sHTML) > 0 Then
objA(n).Click
Exit For
End If
Next
Set objA = Nothing
End Sub

閲覧数:
110
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

webnaveさん

2017/1/1506:48:53

結論から言うと、JRAのHPはWEBクエリでの取り出しはできません

普通にIEで開かないとJAVAスクリプトでの処理に対応できません

「今週の出馬表」のテーブルって

1月14日(土) 1回中山4日 1回京都4日 1回中京1日
1月15日(日) 1回中山5日 1回京都5日 1回中京2日


これのことかな?

そうならばテーブル番号の10番と12番なので

ページが開ききった状態で
With objIE
.ExecWB 17, 2, 0, 0
.ExecWB 12, 2, 0, 0
End With


これの代わりに


'クリップボードにテーブル(10)とテーブル(12)を取り込む
With New MSForms.DataObject
.SetText objIE.document.getElementsByTagName("table")(10).outerHTML & objIE.document.getElementsByTagName("table")(12).outerHTML
.PutInClipboard
End With

Sheets("開催情報").Select
Range("a1").Select

'クリップボードの貼付け
ActiveSheet.PasteSpecial Format:="Unicode テキスト",NoHTMLFormatting:=True



これで可能

ただ一つだけ注意が必要なことが
JAVAスクリプトでページの書き換えを行っているサイトの場合、表面上に見えていないIEObjectが残る場合がある
その場合は表示されているIEObjectを掴み直さないと、正しい表示が出ない

表示されているIEを掴み直すFunction

Function ieFind() As InternetExplorer

Dim objShell As Object, objWin As Object

Set objShell = CreateObject("Shell.Application")

For Each objWin In objShell.Windows

If objWin.Name = "Internet Explorer" Then
Set ieFind = objWin

End If

Next

Set objShell = Nothing

End Function

クリップボードに取り込む前に
Set objIE = ieFind()

を実行する必要があります

質問した人からのコメント

2017/1/15 13:49:50

webnavinaviさん

>結論から言うと、JRAのHPはWEBクエリでの取り出しはできません
これがわかっただけでも勉強になりました。

また、そのあとのコードは、私のやりたいことを完璧にこなしてくれました。
まさにドンピシャでした。本当にありがとうございました。

つぎは「単勝オッズ」の取得にトライしていきます。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる