1.速報系データをダウンロードするプログラムを作ります。
”Top”シートにコマンドボタンを追加し、名前(Caption)を”B速報系データ取得[0BXX]”とします。下図参照。
この回で作成するプログラムではセル”D”列にデータを表示するため、今までに作成したボタンが”D”列にかかっている場合は、”D”列を避けるようにずらしてください。
(注意:この回で作成するプログラムはこの回分をすべて作成するまで、できるだけ中断しないでください。やむをえず中断して終了する場合は、上書き保存で保存後Excelを終了してください。再起動時は、この回のプログラムを完了するまで、<速報系データ取得[0BXX]>ボタンをクリックしないでください)
 |
速報系データを取得する順番は下図のようにしています。(この順番でなければいけないというものではありません) |
 |
@コントロールツールボックスをデザインモード・オンにして、”B速報系データ取得[0BXX]”ボタンをダブルくクリックして、[CommandButton4]に下記コードを記述します(”Top”シート)。
速報系データを上図の順番にダウンロードします。
|
A上記のプログラムで使う[速報データ取得]サブルーチンを作ります。
”mMod2”モジュールに追加記述します。"OBXX"タイプの速報データを順番にダウンロードします。このプログラムは総合的なプログラムで、順次この後で作る個々の[0BXX]データ取得プログラムを呼び出すものです。
最初の部分の「条件設定およびクリア」部分では、JV-Linkの設定やすでに書き込まれているシートの領域を消去します。
「個別データの取得と表示」以下で順次別のプログラムを呼び出して実行します。
|
Bさらに下記のサブルーチンを記述します。[DownloadJVRT_0B14]
これらは上記のサブルーチンの中の各データをダウンロードするプログラムです。”mMod2”モジュールに追加記述します。ダウンロード順とはサブルーチンの記述順番が違いますが、理解と作りやすいように処理方法に共通性のあるサブルーチンを並べています。
まずは”速報開催変更情報(0B14)”ダウンロード用のコードです。変更”データ種別ID”(dataspec)と開催年月日(key)をパラメータにして呼び出します。
これは開催情報の発走時刻や競走馬取り消し、騎手変更などがあった場合に前日〜開催日に提供されるデータ取得用のため、変更がない場合は、使用されません。
|
速報開催変更情報(0B14)のダウンロードフローチャートは下図のイメージです。
|
 |
プログラムのポイント
速報開催情報(0B14)には、5つのデータが混在します。天候・馬場状態(WE)、コース変更(CC)、発走時刻変更(TC)、取消・除外(AV)、騎手変更(JC)。騎手変更や取消・除外など何もない場合には提供されないデータもあります。
騎手変更などは、未定のままや次の騎手が決まるレースごとに何回も提供されるものもあります。
これらの混在するデータをレコード種別ID別に文字列として連結し、さらに全体を1つの文字列に連結("#"記号を挟んで連結)してセーブするのがポイントです(後で読み込む際にまた分割します)。
変更情報で扱うデータは5種類ですが、基本的な扱い方法は同じです。
(1)まず配列が1個の初期配列を用意し、データがあればそこに代入する。
(2)さらに変更情報があれば配列を拡張して、配列データを代入する。(データは順次ワークシートに表示する)
(3)最初のデータと次のデータを”#”記号で連結する文字列を作る。
(4)全データが終わるまで、(2)(3)を行い、最後の連結データを保存する。連結したデータを後で利用する場合は、”#”記号を手掛かりにして分割して元の配列を作ります。
(注意:”#”記号がJVDataに使われていないことを前提にしているので、もし”#”が使われている場合は、正しくデータを認識することができない恐れがあります。今のところはOKのようですが・・・) |
C次のサブルーチンは速報レース情報(0B12)をダウンロードするプログラムです。[DownloadJVRT_0B12]
”mMod2”モジュールに記述します。
"0B12"はレース結果の着順や払戻情報が含まれるデータで、レース確定後に何段階かの”データ区分”で提供されます。たとえば3着までの着順と払戻だけの情報や、最後には全着順やコーナー順位までの確定段階まで。
3つのレコード種別(RA/SE/HR)に分けて取得します。
|
プログラムのポイント
レース結果情報は、開催場所により結果の判明する時間が異なります。このため速報データとしては最初は少ないデータ、レースが進むにつれてデータが増加します。並び方も場所別ではありません(最終的には場所別になる)。この不定期な並び方を文字列データの連結で処理するところがポイントです。
速報レース情報(0B12)のフローチャートは前の(0B14)と同じです。扱うレコード種別が3つだけの違いです。 |
D次のサブルーチンは”データマイニング予想値(0B13)”をダウンロードするものです。”mMod2”モジュールに記述します。
[DownloadJVRT_0B13]
|
プログラムのポイント
このデータは”データマイニング”という1種類のみのデータを扱うので、前2つのサブルーチンほど処理が複雑ではありません。特に難しいコードはありません。ただデータマイニングデータは前日、オッズ発表、馬体重発表後など2〜3段階でデータが提供されます。 |
”データマイニング情報(0B13)”のダウンロードのフローチャートは下図のイメージです。
基本的には前のものと同じですが、データが1種類のため、定義した配列にデータを代入し、セーブも配列で行います。(連結形式ではありません)”0B13”データは、開催日1日単位で提供されるため、配列1つが1レース分のデータになります。
|
 |
E次のサブルーチンは”馬体重情報(0B11)”をダウンロードするものです。”mMod2”モジュールに記述します。
[DownloadJVRT_0B11]
プログラムのポイント
このサブルーチンも前のプログラムと同じく単一のデータ(馬体重)を扱うので処理方法も似ています。馬体重情報はレースの1時間位前に発表されるので、その都度提供されます。
ダウンロードのフローチャートも前の”データマイニング(0B13)”と同じです。
|
F次のサブルーチンは”速報オッズ(0B30)”をダウンロードするものです。[DownloadJVRT_0B30]
このデータの扱いは若干ややこしいです。
フローチャートは下図のイメージです。中央競馬では全国10か所の競馬場があり、その中で2〜3の場所で競馬が開催され、それぞれが最大で12レースあります。このサブルーチン(マクロ)では、競馬場を1番目(札幌)とレース数を1レースから想定してデータを取得するキーを設定して、該当するデータの有無をチェックしていきます。該当するデータがあればダウンロードします。
 |
コードは”mMod2”モジュールに記述します。
プログラムのポイント
このデータも6つの種類のオッズを1つにまとめているので、各データを連結してセーブします。また今までのサブルーチンのように開催日単位でダウンロードするのではなく、レース単位で取得するので、処理が少しややこしくなります。
また、サーバーエラー(タイムアウト)によりダウンロードに失敗することもあります。サーバーエラーが起こったときに同じレース分を3回リトライするようにしたのがポイントです。
(注意:このマクロの中で、競馬場コード(01〜10)を名前(札幌〜小倉)に変換する関数マクロを使っていますが、それは後で作成します。) |
G次は”時系列オッズ(0B41/0B42)”をダウンロードするものです。[DownloadJVRT_0B4142]
ダウンロードのフローチャートは下図のイメージです。
|
コードは”mMod2”モジュールに記述します。
時系列オッズは単複枠(0B41)と馬連(0B42)の2種類ありますが、共通のサブルーチンです。
プログラムのポイント
速報オッズと同様にレース単位で取得するので、開催日と場所コード、レース番号を特定してダウンロードする必要があります。時系列で提供されるためにオッズデータの量は大きくなりますが、扱うデータは"O1"あるいは"O2"のみなので処理はそうややこしくありません。
ただこれもサーバーエラー(タイムアウト)でダウンロードに失敗することもあります。エラー(-1)の場合、通常はその場所のデータがない場合を示しますが、JVLinkのエラーメッセージにバグがあり、ダウンロードに失敗しても(-1)になるので、開催場所と一致するかどうかでエラー処理する工夫が必要です。ここでは10場所全部を総当りにチェックし、1レースのデータがないときにエラー(-1)を出しますが、開催場所と一致しなければもともとデータがない(正常)として次の場所を探します。もし開催場所と一致していれば取得に失敗したとみて3回までリトライするようにしています。
(注意)このJVLinkのバグはタイムアウトのときにサーバーエラー(-413)とせず、データなし(-1)というメッセージを出すものです。すでに改修済みのはずですが、上記コードはそのまま使えると思います。自信はないですが。。。 |
H次に場所コードを競馬場名に変換するファンクションサブルーチン(関数マクロ)を作ります。[KeibajoName]
標準モジュールを挿入して、名前を"mMod3"とします。
下記コードをmMod3に記述してください。
プログラムの説明
これは引数としてBaCodeに"01"〜"10"の競馬場コードを与えるとその数値に対応した場所名をChoose関数で選択して戻り値として戻します。"01"〜"10"以外のデータを与えた場合はすべて”地方”場所として返します。
以上が終わったら、上書き保存をしてください。 |
プログラムの実行
”Top”シートのコンボボックスで開催日の「年月日」を選択して、<速報系データ取得[0BXX]>ボタンをクリックしてプログラムを実行してください。速報系データは開催日の日付でないと取得できません。当然開催日前の木曜・金曜は取得できません。
該当する速報系データを順次ダウンロードしてワークシートに表示します。
下図のように表示されれば正常です。”B9”セルのデータ数は112程度になると思います。

以上で、速報系データをダウンロードするプログラムは完成、つまりこれで3つのダウンロードプログラムが完成です。
注意:この速報系もファイル名をダブルクリックしてもワークシートに展開はしません。展開するプログラムは次回以降で作成します。 |
使い方の注意
(1)”レース補てん情報[RCOV]”は、一度ダウンロードすると次週に新しいデータになるまでダウンロードしません。替わりにセーブしたファイルを表示します。
(2)”レース情報[RACE]”は、開催日前〜開催日当日〜月曜の取得タイミングにより、取得できる内容が変わります。同じものが取得できる場合もあれば、同じデータが取得できない場合もあります。実際にどんなデータが取得できるのか仕様書と比較しながらやってみたら理解できると思います。確定後は同じデータになるので[RCOV]同様にセーブしたファイルを表示します。
(3)”速報系データ[0BXX]”も取得のたびにデータが変わります。このためFromtimeという考えはありません。開催日当日のオッズは時刻により内容がどんどん変わります。”速報系データ”は開催日以前は前日発売出ない限り取得できません。過去のデータでも1年以内であればたぶん取得できると思います。 |
ページトップへ |