![見出し画像](https://assets.st-note.com/production/uploads/images/104437553/rectangle_large_type_2_4bc143ca8a757ab7805cb1f8a7229da9.png?width=800)
【競馬】Visual Basic で JRA-VAN DataLab. のデータを取得する
Visual Basic で JV-Link を操作することにより、JRA-VAN DataLab. が提供する競馬データを取得することができます。
今回は Visual Basic を使って簡単な競馬ソフトを作りたいと思います。
1. 動作環境
OS : Windows
どこまで古いバージョンで動作するかは分からないですが、Windows 10 以降であれば問題ないはずです。
私の使っている環境は
Windows 11 Home (64bit 版)
です。
2. JV-Link のインストール
こちらのページの [動作確認 (JV-Link)] のタブからインストーラーをダウンロードしてインストールおよび初期設定を行って下さい。
※ 使用するには JRA-VAN DataLab. の会員登録が必要です。
3. Visual Studio 2019 のインストール
Visual Studio Installer を使って Visual Studio Community 2019 をインストールします。
ワークロードには [デスクトップとモバイル] > [.NET デスクトップ開発] を選択します。
※ Visual Studio 2019 を使用して下さい。Visual Studio 2020 は IDE 自体が 64bit 化されたためか、この記事の手順ではうまくいきません。
![](https://assets.st-note.com/img/1682926120863-U0olm6uxLM.png?width=800)
![](https://assets.st-note.com/img/1682926128819-fjhpYPJVFB.png?width=800)
4. 新規プロジェクトの作成
Visual Studio 2019 を起動し、[新しいプロジェクトの作成] をクリックします。
![](https://assets.st-note.com/img/1682926522994-rcWVVSR8KB.png?width=800)
プロジェクト テンプレートから Visual Basic 用の [Windows フォーム アプリケーション (.NET Framework)] を選択し、[次へ] ボタンをクリックします。
※ [Windows フォーム アプリ] の方ではないので注意して下さい。
![](https://assets.st-note.com/img/1682926601107-wJtMQ6LQNA.png?width=800)
プロジェクト名、場所、ソリューション名を設定し、[作成] ボタンをクリックします。
プロジェクト名、ソリューション名はデフォルトの [WindowsApp1] としています。
![](https://assets.st-note.com/img/1682927056555-qdbyLeS6q2.png?width=800)
新規のプロジェクトが作成されました。
![](https://assets.st-note.com/img/1682927892612-U7yOP5hmdK.png?width=800)
画面左端の [ツールボックス] タブをクリックします。
![](https://assets.st-note.com/img/1682927738186-S7OdreH7s2.png)
ツールボックス パネルが開いたら、ピンマークをクリックしツールボックス パネルを固定します。
![](https://assets.st-note.com/img/1682928050047-qYBAo33bBh.png)
5. JVLink Class の表示(初回のみ)
ツールボックス内の [全般] を右クリックし、[アイテムの選択] をクリックします。
![](https://assets.st-note.com/img/1682928323542-tm8aftBEbI.png)
ツールボックス アイテムの選択画面が開きます。
![](https://assets.st-note.com/img/1682928448084-UWTQz9YpFR.png?width=800)
[COM コンポーネント] タブを開き、[JVLink Class] にチェックを入れ、[OK] ボタンをクリックします。
![](https://assets.st-note.com/img/1682932495783-Y9Bqco8Tdv.png?width=800)
ツールボックス内に [JVLink Class] が表示されれば OK です。
![](https://assets.st-note.com/img/1682928732281-CagkoWo4us.png)
※ JVLink Class の表示は一度行えば設定が保存されます。
6. プロジェクトの作成
ツールボックス内の [コモン コントロール] > [Button] をフォーム上に配置します。
![](https://assets.st-note.com/img/1682929266172-FyBxo69gON.png)
IDE 画面右下のプロパティの Name はデフォルトの [Button1] としています。
![](https://assets.st-note.com/img/1682929560790-SG8DTBt6R2.png)
ツールボックス内の [全般] > [JVLink Class] をフォーム上に配置します。
※ JVLink Class は実行時に表示されないので、レイアウトを気にする必要はありません。
![](https://assets.st-note.com/img/1682929273195-ZrNeAQQnWy.png)
Name はデフォルトの [AxJVLink1] としています。
![](https://assets.st-note.com/img/1682929873499-LmgTP9ixBM.png)
デザインビューのフォームを選択し、プロパティをイベント タブに切り替え、[Load] の右側の空欄をダブルクリックします。
![](https://assets.st-note.com/img/1682930311969-ogNoX7n9og.png?width=800)
Form1_Load プロシージャが追加された状態でコードエディタが開きます。
![](https://assets.st-note.com/img/1682930671129-1A1rl9eCS9.png?width=800)
Form1_Load プロシージャの中身を下記コードで上書きします。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim sid As String = "UNKNOWN"
Dim returnCode As Long
'JVLink初期化
returnCode = Me.AxJVLink1.JVInit(sid)
'JVInitエラー処理
If returnCode <> 0 Then
MessageBox.Show("JVInitエラー:" & returnCode)
Exit Sub
End If
End Sub
デザインビューのフォーム上の Button1 をダブルクリックします。
![](https://assets.st-note.com/img/1682931159101-9AjjBKdqPL.png)
Button1_Click プロシージャが追加されます。
![](https://assets.st-note.com/img/1682931175231-EzVuPmpUPT.png?width=800)
Button1_Click プロシージャの中身を下記コードで上書きします。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim returnCode As Long
Const buffSize As Long = 40000
Const nameSize As Long = 256
Dim buff As String
Dim fileName As String
Dim raceName As String
Dim raceNames As String = ""
'速報系データの0B12を呼び出し
'日付は直近の土日を指定して下さい
returnCode = Me.AxJVLink1.JVRTOpen("0B12", "20230430")
'JVRTOpenエラー処理
If returnCode <> 0 Then
MessageBox.Show("JVOpenエラー:" & returnCode)
Exit Sub
End If
returnCode = 1
While returnCode <> 0
'バッファ作成
buff = New String(vbNullChar, buffSize)
fileName = New String(vbNullChar, nameSize)
returnCode = Me.AxJVLink1.JVRead(buff, buffSize, fileName)
'JVReadエラー処理
If returnCode < -1 Then
MessageBox.Show("JVReadエラー:" & returnCode)
Exit While
End If
If Mid(buff, 1, 2) = "RA" Then
'レース名を抽出し末尾のスペースを除去
raceName = Mid(buff, 33, 30).TrimEnd()
'レース名が空文字でなければレース名一覧に結合
If raceName <> "" Then
raceNames = raceNames & raceName & vbCrLf
End If
End If
End While
'レース名一覧を表示
MessageBox.Show(raceNames)
'JVLink 終了処理
returnCode = Me.AxJVLink1.JVClose()
End Sub
12 行目の
returnCode = Me.AxJVLink1.JVRTOpen("0B12", "20230430")
の日付部分は直近の土日(中央競馬のレースが開催された日)を yyyymmdd 形式で指定して下さい。
※ このコードで取得している速報系データはレース後 1 週間程で配信されなくなるので、古い開催日を指定してもデータは取得できません。
7. 動作確認
[開始] ボタンをクリックします。
![](https://assets.st-note.com/img/1682931887926-1xuyYdaOHB.png?width=800)
Form1 が表示されたら、Button1 をクリックします。
![](https://assets.st-note.com/img/1682931990231-BWgrCm7U1t.png?width=800)
メッセージボックスにレース名が表示されれば OK です。
![](https://assets.st-note.com/img/1682932001216-Eu2bq50bqB.png?width=800)
レース開催が無い日や、古い開催日をコード内で指定している場合は下図のようなエラーが発生します。
![](https://assets.st-note.com/img/1682932132770-RhoJdxL1Nk.png?width=800)
この記事が気に入ったらサポートをしてみませんか?