【競馬データ分析】ExcelVBAとAccessDBを使って独自の指数を構築する- PERT 3 データ取込編-

競馬_VBA

データ収集がようやく終わりました。

やったことはこちらの記事にて。

ちょっとずつやってかれこれ2週間くらいかかりましたかね。辛かった…。

次は収集したデータを繋げる作業です。

長いので複数に分けようかと思います。

 

やったこと

取込①

先週の結果分析のデータをエクセルの取り込んでいきます。

これはめんどくさいけど手動です(テキストをエクセルに転記)。

これにTARGET frontier JVから取得した開催タイム分析のデータをくっつけます。

当然、このタイミングでは紐づくキーがありませんので、自分で生成する必要があります。

僕の場合は雑に日付+馬名でやりました。両方のデータに共通して保持している情報なので可能というわけです。

あとは本当に紐づけるだけなので適当にシートに展開してVLOOKUPなりやるだけです。

こんな感じでデータを結合して横1列にしています。

先週の結果分析だけでは拾えない情報(例えばLAPタイムなど)がくっついたデータとなります。

 

取込②

次の作業は軽くプログラミングが必要です。といってもVBAですが。

取込②はTARGET frontier JVより取得した出馬表と取込①のデータを結合します。

出馬表のテキストファイルをエクセルに転記して、

同じように日付+馬名で無理矢理KEYを作成して結合します。やりたいことは同じですね。

↓サンプルコード

‘勝ち馬名
Dim win As String
win = Cells(i, 4)

‘KEY生成
Dim key As String
key = date1 & win

‘MAINシートからマッチするレースを検索
‘添え字(MAIN)
Dim mi As Long
mi = 0
Dim myRange As Range
Dim myObj As Range

Set myRange = Worksheets(“MAIN”).Range(“U1:U100000”)
Set myObj = myRange.Find(key, LookAt:=xlWhole)

If myObj Is Nothing Then
‘ない場合
MsgBox “‘” & key & “‘はありませんでした”
Else
‘行数取得
mi = myObj.Row
End If

 

「mi」にマッチしたシートの行数が入ってくるので、あとはこれを転記するだけの簡単なお仕事です。

‘値セット
Cells(i – 4, 17) = Worksheets(“MAIN”).Cells(mi, 1)
Cells(i – 4, 18) = Worksheets(“MAIN”).Cells(mi, 2)
Cells(i – 4, 19) = Worksheets(“MAIN”).Cells(mi, 3)
Cells(i – 4, 20) = Worksheets(“MAIN”).Cells(mi, 4)
Cells(i – 4, 21) = Worksheets(“MAIN”).Cells(mi, 5)

アウトプット

 

取込③

取込②のアウトプットにまだ結合したいデータがあるので追加でやります。

追加するのは、TARGET frontier JVから取得した1レースごとの詳細成績です。

CSVファイルになります。

色々やり方はあると思いますが、同じエクセルのワークフォルダに一度展開してやりました。

それだど↑で書いたコードと同じ処理が使えるので楽です。

↓CSVファイルを読み込んで転記するコード(ネットから拾ったのもモロぱくり)

‘CSV取込
Dim A_Sheet ‘Excelファイルのシート名を入れ込む変数’
Dim Csv_Import_File ‘Excelファイルに取り込むCSVファイルの名前を入れ込む変数’

A_Sheet = ActiveSheet.Name ‘現在アクティブなシート名を変数 A_Sheet に入れ込む’

Csv_Import_File = Application.GetOpenFilename(“CSVファイル,*.csv”) ‘CSVファイルを選択する’
If Csv_Import_File = “False” Then Exit Sub ‘キャンセルなら終了’

ThisWorkbook.Sheets(“WK”).Range(“A1:AZ100000”).ClearContents ‘「CSVデータ取込み」シートのセル「A1~AZ100000」をクリアする’

With Workbooks.Open(Csv_Import_File)
.Sheets(1).Cells.Copy ThisWorkbook.Sheets(“WK”).Range(“A1”) ‘全てのデータをこのブックの「CSVデータ取込み」シートにコピー’
.Close ‘CSVファイルを閉じる’
End With

Worksheets(A_Sheet).Activate ‘A_Sheet という名前のシートをアクティブにする’

あとはお得意の行数取得処理をぶち込んでやれば終わり!

 

最終アウトプット

これでとりあえず1レースで必要な情報は全部結合することができました。

これからやるのは、これを全レース分集計してデータベースに格納すること。

そしてそのデータベースをインプットにして指数を作るところになります。

まだ先は長いです・・・

コメント

タイトルとURLをコピーしました