見出し画像

【競馬】Access VBA で JRA-VAN DataLab. のデータを取得する

Access VBA で JV-Link を操作することにより、JRA-VAN DataLab. が提供する競馬データを取得することができます。

今回は Access を使って簡単な競馬ソフトを作りたいと思います。
※ Access は 32bit 版を使用して下さい。64bit 版では JV-Link が使えません。

1. JV-Link のインストール

こちらのページの [動作確認 (JV-Link)] のタブからインストーラーをダウンロードしてインストールおよび初期設定を行って下さい。
※ 使用するには JRA-VAN DataLab. の会員登録が必要です。

2. 作成手順

Access で新規の空のデータベースを作成し、適当な名前で保存します。

このとき、ファイルの種類として

  • Microsoft Access データベース (2002 - 2003 形式) (*.mdb)

  • Microsoft Access データベース (2000 形式) (*.mdb)

  • Microsoft Access 2007 - 2016 データベース (*.accdb)

が選択できますが、どれでも問題ありません。

新規のデータベースが作成されました。

[作成] タブの [フォームデザイン] をクリックします。

新規のフォームが表示されます。

コントロール内の [ボタン] をフォーム上に配置します。
名前はデフォルトの [コマンド0] としています。

コマンドボタンウィザード画面が開いたら [キャンセル] ボタンをクリックして閉じます。

コントロール群の右下の下向きボタンをクリックします。

コントロール一覧が表示されるので、[ActiveX コントロール] をクリックします。

ActiveX コントロールの挿入画面が表示されたら、[JVLink Class] を選択し [OK] ボタンをクリックします。

フォーム上に JV-Link が配置されます。
名前はデフォルトの [JVLink1] としています。
※ JV-Link は実行時に表示されないので、レイアウトを気にする必要はありません。

[コマンド0] ボタンを右クリックし、コンテキストメニュー内の [イベントのビルド] をクリックします。

ビルダーの選択画面が表示されたら、[コード ビルダー] を選択し [OK] ボタンをクリックします。

Microsoft Visual Basic for Applications の画面が開きます。

コマンド0_click プロシージャの中身を下記コードで上書きします。

Private Sub コマンド0_Click()
    Dim sid As String
    Dim retval As Long
    Dim buff As String
    Dim filename As String
    Dim racename As String
    Dim racenames As String

    sid = "UNKNOWN"

    'JVLinkを初期化
    JVLink1.JVInit (sid)

    '速報系データの0B12を呼び出し
    '日付は直近の土日を指定して下さい
    retval = JVLink1.JVRTOpen("0B12", "20230416")

    'JVRTOpenエラー処理
    If (retval < 0) Then
        MsgBox ("JVRTOpenエラー。RC=" & retval)
        GoTo コマンド0_END
    End If

    retval = 1
    While retval <> 0
        'JVRTOpenで指定したデータを1レコードずつ取り込み
        retval = JVLink1.JVRead(buff, 40000, filename)
        'JVReadエラー処理
        If (retval < -1) Then
            MsgBox ("JVReadエラー。RC=" & retval)
            GoTo コマンド0_END
        End If
        If Left(buff, 2) = "RA" Then
            'レース名を抽出し末尾のスペースを除去
            racename = RTrim(Right(Left(buff, 62), 30))
            'レース名が空文字でなければレース名一覧に結合
            If racename <> "" Then
                racenames = racenames & racename & vbCrLf
            End If
        End If
        DoEvents
    Wend
    'レース名一覧を表示
    MsgBox (racenames)

コマンド0_END:

    '一通り読み込みが終わった後はJVCloseを行う
    JVLink1.JVClose

End Sub

16 行目の

    retval = JVLink1.JVRTOpen("0B12", "20230416")

の日付部分は直近の土日(中央競馬のレースが開催された日)を yyyymmdd 形式で指定して下さい。
※ このコードで取得している速報系データはレース後 1 週間程で配信されなくなるので、古い開催日を指定してもデータは取得できません。

3. 動作確認

Access の画面に戻り、[フォーム デザイン] タブの [表示] プルダウン内の [フォーム ビュー] をクリックします。

フォームビューに切り替わったら [コマンド0] ボタンをクリックします。

メッセージボックスにレース名が表示されれば OK です。

レース開催が無い日や、古い開催日をコード内で指定している場合は下図のようなエラーが発生します。

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