見出し画像

Excel VBAでnetkeibaをスクレイピング(無料で競馬新聞風の出馬表を作成するツール)

競馬レース情報を「netkeiba.com」から自動取得(スクレイピング)して、簡易分析するExcelツールを作りました。

ツールの機能としては3つ。
機能① Webからレース情報を取得する
   ・レースの「出馬表」を1シート目に作成
   ・出走馬ごとの「競争成績表」を別シートに作成
機能② 競争成績表を横断比較してタイムを分析(=簡易分析)
機能③ 競馬新聞っぽい紙面を作成

会員登録やアドイン等は一切不要で、純粋にExcelとネット環境さえあれば使えます。
今回は競馬ネタです。業務効率化のテーマからはちょっと外れますが、こういう息抜き要素もたまには挟まないとね。


特徴

Excelで競馬データを取得・分析するツールと言えば、JRASSが提供する「JRA-VAN」が有名どころです。しかし、JRA-VANだと月額利用料が発生します。永久にランニングコストを支払うとか嫌すぎる…orz。
かといって毎回競馬新聞を買うのも手間だし、新聞代も馬鹿にならないですよね…。

そこで、無料かつ会員登録無しで情報が得られる「netkeiba.com」をソース(情報源)としたExcelツールを自作しました。「出走馬・競争成績・コース情報」をランニングコスト無料で、表形式で取得できます。
ついでに簡易的な分析機能と、競馬新聞風の紙面作成機能も付けました。
そこそこ実践で使えるツールにはなったんじゃないかと思います。

できること

冒頭で紹介した機能3つを紹介します。

機能① Webからレース情報を取得

netkeibaのレース情報ページのURLを指定すると、Webから「出馬表」「競争成績」を自動取得して、Excelシートへ転記します。

①出馬表を1シート目に展開
②それぞれの馬の競争成績を、各シートに展開


機能② 「競争成績表」を横断比較してタイムを分析

全ての出走馬の過去成績(競争成績)を比べて、同じ距離の中で最も早い上位3件(タイムと馬名)を抽出します。
赤枠部に抽出結果(距離ごとに上位3件)を書き出します。

距離ごとの上位3件(分析結果)

馬場条件などは無視した単純なタイム比較ですが、それなりに参考にはなります。


機能③ 競馬新聞風のレース情報を作成

紙媒体の競馬新聞でよく見る「縦書きレース情報」を作成します。
見慣れた形式が良かったり、プリンターで印刷するとき等には重宝します。

競馬新聞風の縦書きレース情報

ちなみに、オレンジ色に着色してあるセルは、機能②で抽出した分析結果を反映したものです。これで分析結果が可視化されますね。


使い方

使い方はシンプルで、下画像を見てもらえば大体分かると思います。
使いたい機能のボタンを押してください。

使い方


機能①のボタンを押すと、URLの入力ダイアログが出てきます。
対象WebページのURLを入力してください。

下部ボタンを押すと出てくる、URL入力用ダイアログ

ちなみに入力するURLですが…
netkeibaの「レース」タブまたは「地方競馬」タブから任意のレースを開き、「出馬表」のあるWebページの指定します。
※正しいURLを入力しないとデータ取得できません。

URLの確認方法

取得の様子。(処理スピードは通信状況にも依ります。)


処理の全体像

全体像はこちら。(よく分からない人は読み飛ばしてOK)
【概要】
・Webページ(netkeiba)をスクレイピングして情報取得。
・WebDriverインストール不要(Seleniumを使わない)
・Windows API不使用(64bit/32bitマシンに依存しない)
・機能①の概要
 1.HTTPリクエストを作成・送信・レスポンス受信。
 2.HTMLDocumentオブジェクトでレスポンスデータを受ける。
 3.レスポンスデータの中から任意データを取り出す。
・機能②の概要
 1.出走馬の「過去競争成績」を三次元配列に格納。
   (1次元目:行、2次元目:列、3次元目:シート番号)
 2.三次元配列の要素同士を比較。
 3.比較結果をシート1に書き出す。
・機能③の概要
 1.出馬表を二次元配列に格納。
 2.過去競争成績を二次元配列に格納。
 3.これら配列を整形して、シート2に書き出す。
【動作確認済み環境】
・Windows 11 Home (64bit)、Excel® 2021 (64bit)
・Windows 10 Home (64bit)、Excel® 2021 (3 2bit)

ソースコードとExcelファイル

まず、Excelファイル(.xlsmファイル)がこちら。

ここから先は

31,156字 / 1画像 / 2ファイル

¥ 1,000

この記事が気に入ったらサポートをしてみませんか?