【Excel】JRAホームページから競馬DBを自作したい人のExcelVBAマクロ

目次

自作競馬データベース作成する手順|当ブログ記事のまとめ

手動でJRAホームページから12R分コピペしてExcelVBAで表組み

※JRAホームページからUWSCでコピペする自動化はココではまだ含まれていない。コピペは手作業でシートにコピペ後、データ加工部分だけをピックアップしている。UWSCの纏めは私の今後の利用方法により変化する。今後JRA-VANデータラボを利用する可能性もあるので、今のところUWSCは部分的な記事での記載にしている。

馬別のコーナー順は先に処理するのが良い!

これを私はもう旧式のプログラミングの手本のように上から舐めて処理していったので、キーブレイクやらなんやらで、後からデバッグしにくいモジュールを完成させてしまったわけだ。もうこうなると、ちょっとした変更はやりたくなくなるんだよね~

時間がある時に組み直すとしたら、単勝人気の後に新しくWORKで作る

着順 単勝人気 WK_コーナー順
1 1 8–8
2 16 9–9
3 9 12–13

先に縦のデータになっている「コーナー通過順」を処理しておけば、後は着順が空白でなければ行処理を行えばよいので、プログラムの流れは簡単に作成でき後からデバッグしやすい作りになるはずなんだよね~。これはもうしくじったとしか言いようがないが、今からだとまたプログラムを解析してから作成するという手間が増えるので~できれば触りたくないのが本音!

12R分の個別ExcelブックをDB投入用のシートに纏める

  • VBA 別ブックからシートをコピペする雛形
  • このシートからAccess(.accdb)にインポートする(今回はここまでにしておく)
  • JRAホームページは毎年11月末ジャパンカップ終了後翌日にWebコンテンツ内更新が入る
    • レース後17時には当日データをDB投入までやっておくこと
    • 翌日にはWebが更新されているので、プログラムの修正が必要になってくるため
    • これを回避するには、有料のJRA-VANデータラボに登録するしかない!

※Webからコピペする(スクレイピング)作業を自動化するのにUWSCを私は使用しているが
自分が得意なRPAを使えば良い。今ならMicrosoftのPowerAutoDesktopが簡単に始めれるツールかもしれない。
COBOLやBASIC世代は、UWSCがお勧め(まだWin11での利用テストはしていない…2021.11.14現在

2022.1.20現在:私の使用環境下ではWin11上でUWSCプログラム全般の不具合は発生していない
既に1ヵ月ほど全てのマシンをWin11にして動作テストしているので
コピペ程度の自動化やクリックツール的な使い方は全て動作すると思って良い。

M.2 SSDがストレージとしてこれからの主流になるとして

最近の高速マシンでは主流になりつつあるストレージの新しい形。
まだ値段が高いので容量がしれているがそれも一年後は?分からない世界なだけに
これの大容量化が進むとExcelの表が既にデータベースという感じになってくるイメージがある。
容量の制限がほぼなくなることによってスプレッドシートの可能性は大きく広がるよね。
なんせ縦横(ななめ)の制限がなくなるのだから。

※RTX3070ブラボ搭載のi5-10400FでM.2SSDが破損するという悲劇が起きた。[2022.7.25]
急ぎで復旧する必要があった為、余っていたsata-SSD500GBでWindows11をクリアインストールし現在に至るが
ソシャゲ程度しかゲームしない私にとっては、sataで十分ということが分かった。

動画編集に使用している機材だが、使用感はほぼ変わらない。それよりも破損リスクの高い場所にあるM.2を使用する方が危険度が高いということが、今年発覚してよかったよ。100近い動画が消えてしまったが・・・これはどうしようもないw
Youtube準備中の動画が全て消し飛んだのは、かなりのダメージ。ブログや他のデータは全てHDDにセーブ済だったのだが、動画はまだ製作途中だったので、一度もセーブしていなかったのは痛かった😨

コピペ→Excel→表形式(データベース投入型)→Access.accdb→SQL-Express

Excelにコピペするだけで、既にデータベースという時代に突入しつつあるが、流石に5年10年分の競馬データの明細となると2年分がギリといったところ。Excelシートが開かないという破損が起きると、復旧までに時間がかかり最悪データの消失もある。私が自作競馬データベースを作り、データ投入を開始したのが2018.10月からなので、2022.9.5時点でほぼ4年だがMs-Accessの.accdbでは一度もデータベースの破損は起きていない。

Access.mdbはよく破損するので、データベース本体はSQL-Server(SQL-Express)の使用が必須になる。

JRAホームページからExcelシートへコピペした時の馬名「マルガイ・マルチ」処理

これを完全にホームページ内データから判定するならば、出馬表データだけでなく、単複オッズも同時に取得すれば問題は解決できるが、馬名だけのためにオッズが表示されるまで待たなければいけないのは、本末転倒な話になってくる。

結果データを作成する場合だと、既に競走は終了しているので競走結果取得時に同時に最終単複オッズを取得して馬名の判断するといった処理が有効になるが、出馬表データ作成時は前日の11:00には確定しているので、馬券の自動購入や自動予想をする(しようと考えている)なら、多少精度は落ちても文字列操作だけで出馬表は先にデータ化しておきたいと考えるのがシステム構築する上では、現場主義的だろうと私は考える。

具体的な事例で紹介してみよう~

参考:2022.9.18(土)中山12R「マルガイ・マルチ」処理

2022.9.18中山12Rマルガイ・マルチ出馬表参考

このホームページの内容をExcelに値貼付けでコピペすると…

2022.9.18中山12Rマルガイ・マルチ出走馬_Excel値貼付け後参考

データベース投入用に表型に成形すると…

2022.9.18中山12Rマルガイ・マルチ出走馬_Excel表型成形

ExcelVBAで馬名MKを処理している箇所を抜粋

'''馬名MK

'馬名をwk_nm1に代入
wk_nm1 = Sheets(sh_nm).Cells(sLC + j, 4)
wk_nm2 = ""
wk_nm3 = wk_nm1

	If Left(wk_nm1, 3) = "マルチ" Or Left(wk_nm1, 3) = "カクチ" Then
		wk_nm2 = Left(wk_nm1, 3)
		wk_nm3 = Right(wk_nm1, Len(wk_nm1) - 3)
    	If Left(wk_nm3, 4) = "マルガイ" Or Left(wk_nm3, 4) = "カクガイ" Then
    		wk_nm2 = Left(wk_nm1, 7)
        	wk_nm3 = Right(wk_nm1, Len(wk_nm1) - 7)
    	End If
	End If

	If Left(wk_nm1, 4) = "マルガイ" Or Left(wk_nm1, 4) = "カクガイ" Then
		wk_nm2 = Left(wk_nm1, 4)
		wk_nm3 = Right(wk_nm1, Len(wk_nm1) - 4)
        If Left(wk_nm3, 3) = "マルチ" Or Left(wk_nm3, 3) = "カクチ" Then
        	wk_nm2 = Left(wk_nm1, 7)
            wk_nm3 = Right(wk_nm1, Len(wk_nm1) - 7)
        End If
  End If


'馬名MK格納
Sheets("出走D").Cells(LC + 1, 7) = wk_nm2
'馬名
Sheets("出走D").Cells(LC + 1, 8) = wk_nm3
2022.9.18中山4Rエラーデータとして可能されたマルチャン

文字列操作だけでデータ格納できていたのだが…今回、2022.9.18中山4R④マルチャンという馬名の馬が登場しエラーでデータ加工中にシステムが止まっていたので、これを修正する。

'''馬名MK

'馬名をwk_nm1に代入
wk_nm1 = Sheets(sh_nm).Cells(sLC + j, 4)
wk_nm2 = ""
wk_nm3 = wk_nm1
If Not (Left(wk_nm1, 5) = "マルチャン" Or Left(wk_nm1, 5) = "カクチャン") Then
	If Left(wk_nm1, 3) = "マルチ" Or Left(wk_nm1, 3) = "カクチ" Then
		wk_nm2 = Left(wk_nm1, 3)
		wk_nm3 = Right(wk_nm1, Len(wk_nm1) - 3)
    	If Left(wk_nm3, 4) = "マルガイ" Or Left(wk_nm3, 4) = "カクガイ" Then
    		wk_nm2 = Left(wk_nm1, 7)
        	wk_nm3 = Right(wk_nm1, Len(wk_nm1) - 7)
    	End If
	End If
End If
If Not (Left(wk_nm1, 5) = "マルチャン" Or Left(wk_nm1, 5) = "カクチャン") Then
	If Left(wk_nm1, 4) = "マルガイ" Or Left(wk_nm1, 4) = "カクガイ" Then
		wk_nm2 = Left(wk_nm1, 4)
		wk_nm3 = Right(wk_nm1, Len(wk_nm1) - 4)
        If Left(wk_nm3, 3) = "マルチ" Or Left(wk_nm3, 3) = "カクチ" Then
        	wk_nm2 = Left(wk_nm1, 7)
            wk_nm3 = Right(wk_nm1, Len(wk_nm1) - 7)
        End If
     End If
End If

'馬名MK格納
Sheets("出走D").Cells(LC + 1, 7) = wk_nm2
'馬名
Sheets("出走D").Cells(LC + 1, 8) = wk_nm3

馬名が「マルチャン」「カクチャン」の場合はそのまま馬名としてデータ格納するように変更した。
この方法だと今後「マルチ○○」や「カクチ○○」、「マルガイ○○」「カクガイ○○」といった名前での登録名があった場合エラーとなるが、もしそういった名前が出現すればその都度対応しデータを手動で変換するか、プログラムを都度修正するしかない。ちなみに今回の「マルチャン」が馬名に出てくる前の4年間でエラーデータが出現したのは一度もない。

完全なデータ処理を行いたいなら、前述しているようにオッズデータを取得する際に馬名が同時に取得できるので、そちらの馬名を使用するといった方法で対応するか、他のサイトから馬名を流用するなどの方法が考えられる。が、私のように個人だけでデータ使用している場合は都度データ修正する程度の問題にしかならないので、現場利用を優先するのもアリだと思う。。。が、これについては意見が分かれるところだ。

システム運用的にはあまり褒められた運用ではない ❣

が、馬券研究者として進むならシステム云々よりも先ずは

予想に役立つモノを早く作成するのに全力を傾けるべきだ ❣

と考える。

どちらを取るかは、自分のスキルと手間を考慮して決めていく。🤖

参考:2022.9.18(土)中山4R④「マルチャン」オッズデータをExcelシートに値貼付け後

2022.9.18中山4Rオッズデータ貼付け

参考:2022.9.18(土)中山12RオッズデータをExcelシートに値貼付け後

2022.9.18中山12Rオッズデータ貼付け

⑬(マルガイ)ジッピーレーサー
⑭(マルガイマルチ)マイサンライズ

馬名MKにあたるマルガイ・マルチ表示がないので馬名取得としてはオッズ表の馬名を使えば間違いはない ❣

Excel VBA 逆引き大全 600の極意 Microsoft 365/Office 2021/2019/2016/2013対応

Excel VBA 逆引き大全 600の極意 Microsoft 365

※私が持っているのが2016年版(以下は2016)

  1. ExcelVBAの基本構文
  2. セルの操作
  3. 関数
  4. ワークシート、ウィンドウの操作
  5. ブック操作
  6. データ操作
  7. テーブル・ピボットテーブル
  8. 図形
  9. グラフ
  10. ユーザーフォーム
  11. 印刷
  12. ファイルとフォルダ
  13. データ連携
  14. イベント
  15. バージョン・トラブルシューティング・エラー処理
  16. 高度なテクニック
  17. 索引

目次が巻頭で検索が巻末。昔のタイプの本の構成だが、索引がページでなくTipsという見出しNo.になっていて慣れるまでは検索しづらい。
Amazonレビューは★3.9

私のKindle-Unlimited評価は★4

編集後記

コピペシステムを稼働するための準備

  • 光回線契約
    • NTT(今ならNURO光が安い) or ケーブルTV
  • パソコン調達Ryzen5 3600(第3世代以降)intel i5-10400(第10世代以降)
    • 第12世代ならi3-12300の方が速いが、体感できるほどの差はないマザーボードがH470以上が余っているなら、第10世代で組む方がコストは格段に安い
    • H410でもi5までなら十分だとは思うが…
  • エンコード必要ならGTX1650から始めてみよう
    • 2024.1月現在もグラボが安くなってきているので、GTX1650からRTX3070tiでお好みを物色しよう
  • Windows11搭載
  • Excel
  • Access
  • UWSC(無料)

Kindle-Unlimited読み放題から厳選

図解、見開きカラーを優先し厳選。こういうプログラムの本は
行き詰った時にパラパラ見ることでその時は必要ではないことも
情報として頭の片隅にタマタマ蓄積されたりするもんだ。

「あれ?確かそんな関数?命令あったよね~!?的な…」

※Kindle-Unlimited無料枠で読める本を厳選した。が無料期間が既に終了の場合あり。

VBAが全てゴミになる日がくるかもしれないが・・・

COBOLからVBAへそしてUWSCとそれとなく個人的にはプログラミングを楽しめてきた。
もしExcelVBAがゴミとなる日が来ても次の新しい言語もしくはそれに代わるものへの参考にはなるはずだ。
そしてその過程と作成することが楽しく感じられたらそれで十分ではないかな?
と、ちょっと仙人ぽく締めてみた。

2024.1.24時点、Windows11でUWSCは問題なく動いている。

まだしばらくはWindowsユーザーとしていてよさそうだw

それでは、またね~😄

目次