【注記】
下記のプログラムの、 netkeiba のレース内容の記載位置が流動的で、そのままでは動作をしないようです。
単に、ネットから競馬データを取り込みたいだけでしたら、 BET Master の御利用をお薦めします。
このソフトは本来はシェアウェア(2100円)で機能制限(IPATの投票機能に制限)がありますが、BET Master Ver2.05b は、無料で全機能が使えるようです。
競馬新聞の代わりとして使用されるのであれば、十分な機能を持っております。
エクセルにデータを取り込みたい場合は、BET Master で作成された CSVファイルを変換しながらエクセルに登録する必要がありますので、若干敷居が高くなります。
WEBクエリ(query)と言うのは、エクセル(Excel)がインターネットのデータを取り込むために用意されている機能です。
私の場合は、JRA-VAN を利用してレースデータを取得しているのでWEBクエリを利用する必要はないのですが、JRA-VAN の DataLab に加入していない人は、競馬の出馬表をインターネットを通じてエクセルに展開している人も多いようです。
たまたま、グーグルで検索していた時に「貧乏」馬券師&船券師のブログさんのサイトに netkeiba からデータを取得してエクセルで競馬予想をする方法が載っておりましたので試して見ました。
記録マクロでプログラムを作成されているようで、私も記録マクロは近年使用したことがなくて、コードの意味も理解しておりませんが問題なく動作しました。
ネットから出馬表や競走馬のデータを取得している方には参考になるかも知れませんのでエクセルで簡単なプログラムを組んでみました。
プログラムは以下の通りです。
Sub WebKueri() Dim URL As String Dim i As Integer Dim k As Integer Dim TryMode As Boolean URL = InputBox("レース情報を含む文字列(URL)を入力してください。", "レース情報入力") If URL = "" Then Exit Sub End If If InStr(URL, "id=c") > 0 Then URL = Mid$(URL, InStr(URL, "id=c") + 4, 10) Else MsgBox ("レース情報を見つける事が出来ませんでした。" _ & vbNewLine & "文字列の中に、レース情報(id=c201*******等)が含まれていなければなりません。"), vbInformation Exit Sub End If With Sheet1 Range("A1:O360").ClearContents For i = 1 To 12 k = 29 Start: With ActiveSheet.QueryTables.Add(Connection:="URL;http://race.netkeiba.com/?pid=race&id=c" & URL & Right$("0" & CStr(i), 2) & "&mode=shutuba", Destination:=Range("A" & CStr(30 * (i - 1) + 1))) .Name = "出馬表" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = CStr(k) .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = True .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With If InStr(Cells(30 * (i - 1) + 1, 1), "日目") = 0 Then If TryMode = False Then TryMode = True k = 27 GoTo Start Else k = k + 1 If k >= 32 Then Exit Sub GoTo Start End If End If '不要な宣伝消去 Cells(30 * (i - 1) + 1, 2) = "" Cells(30 * (i - 1) + 1, 3) = "" TryMode = False k = 35 Tugi: With ActiveSheet.QueryTables.Add(Connection:="URL;http://race.netkeiba.com/?pid=race&id=c" & URL & Right$("0" & CStr(i), 2) & "&mode=shutuba", Destination:=Range("A" & CStr(30 * (i - 1) + 6))) .Name = "出馬表" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = False .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = CStr(k) .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = True .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With If InStr(Cells(30 * (i - 1) + 6, 1), "枠") = 0 Then Range("A" & CStr(30 * (i - 1) + 6) & ":O" & CStr(30 * (i - 1) + 29)).ClearContents If TryMode = False Then TryMode = True k = 30 GoTo Tugi Else k = k + 1 If k >= 40 Then Exit Sub GoTo Tugi End If End If Next End With End Sub
プログラムの内容は、前述のサイトに記載しているものを若干アレンジした程度のものです。(改良の余地が多くあります)
取り込みたいレース情報を入力するのが面倒だと思いましたので、インプットボックスに netkeiba のURLをそのまま入力させるようにしました。
これならコピペ(コピー&ペースト)が出来ますので場所のコードや回次を調べる必要がありません。
この中に含まれているレース情報の部分を取り出してエクセルに展開させています。
URL に含まれているレース情報は特定のレースだけですが、1〜12レースの全てを取り込むようにしています。
こうする事で、その開催地の全レースの出馬表がエクセルに展開されます。
取り込まれたエクセルの内容は以下のようになります。(ここでは11Rを表示)
私のプログラムでは出馬表データだけですが、netkeiba には競走馬の過去レースも提供しておりますので応用すれば取り込みは可能と思います。
これなら JRA-VAN に加入する必要は無いのかと思いますが、データ量の少なさとプログラム作成の手間を考えると私には何とも言えません。
プログラムの勉強をされたい方や競馬予想にお金を掛けたくない人向きかなと思います。