じゃばのひまつぶし:ExcelVBAによる競馬ソフト自作教室とJRA-VAN登録ソフト(おずたんシリーズ)のサポートサイトです。
JRA-VAN Data Lab対応 競馬ソフト自作教室

<New JVData Explorer> 基礎編:レース情報展開1
 
第7回

更新日
2012-01-14


ここでは、今までのプログラムでダウンロードしたデータの内容をワークシートに展開表示するプログラムを作ります。
第7回では、レース情報(RA)と競走馬情報の(SE)と払戻情報(HR)の表示プログラムを作ります。次回以降では、今回のプログラムに順次表示プログラムを追加していきます。

使い方は
(1)知りたいデータ種別IDのボタンを押して、ダウンロードしてセーブ済みのファイルを”Top”シートに表示する。
(2)”Top”シートのファイル名をダブルクリックしたらそれぞれのレコード種別IDのワークシートに表示するという形です。

下図では例えば、<レース情報取得[RACE]>ボタンを押すと、ダウンロードするファイルがあればダウンロードして、なければセーブ済みのファイルを検索してファイル名を”Top”シートに表示します。この中で11行目のファイル種別の欄(”H列”)あるいはファイル名の欄(”I列”)をダブルクリックすると、すでに作った”RA_RACE”ワークシートに内容を表示するようにします。

ファイルを検索するキーは、ファイル名のある行の”H列”のファイル種別、”I列”のファイル名、”J列”の年月日です。
[RACE]データの展開を先に説明します。

ファイル名を取得してワークシートへ展開表示するまでのフローチャートは右図のイメージです。


どのファイル名でもフローチャートは共通です。レコード種別に対応したサブルーチンを変えるだけですが、このサブルーチンが基本的にはデータの数だけ必要なので多くなります。



まずワークシートをダブルクリックしたときにファイルデータを判断して表示用サブルーチンを呼び出すメインプログラムを作ります(図の上から下までを扱うプログラム)。図のフローチャートの赤枠部分を追加しつつ作りますが、種類が多くて長いので少しずつ作っていきます。(メインプログラムの中にもにサブルーチンを呼び出すコードがどんどん増えていきますので、作り方に注意してください。)
1.準備
(1)VBE画面でプロジェクトウィンドウでSheet1(Top)をダブルクリックし、コードウィンドウメニューで”Worksheet”を選択します。


(2)次に右側メニューから”BeforeDoblueClick”を選択すると、コードウィンドウにサブルーチンが表示されます。



最初に表示される”Worksheet_SelectionChange”の方は使いませんので削除してください(残しておいても構いません)。
2.ワークシートをダブルクリックしてファイルを判断するメインプログラムを作る。
Worksheet_BeforeDoubleClickの部分にコードを記述します。[Worksheet_BeforeDoubleClick]
最初は、”レース詳細(RA)”と”馬毎レース情報(SE)”及び”払戻(HR)”を表示する部分を作ります。
メインプログラムのコードは下図です。この回で作るマクロは一部で、次回以降で追加するものがあります。次回以降で追加するコードは各指定の部分に挿入してください。
プログラムのポイント

ワークシートをダブルクリックすると引数としてTarget変数のTarget.Rowに行番号が、Target.Column変数に列位置が取り込まれます。Target.Column変数で”B-C列”か、”H-I列”か、”N-O列”以外、つまり「ファイル種別」あるいは「ファイル名」以外の列を指定した場合、あるいはTareget.Rowが上から10行以内のファイルがない領域を指定した場合は無効としています。有効な範囲の場合は、Target.Row変数に取り込まれた行番号に応じたファイルデータを検索して、データ種別ID、レコード種別IDに応じて呼び出すサブルーチン(次項目で作成)を変えます。

無効な範囲を指定した場合の判断コードの部分に[Range("A1").Select]という記述がありますが、これは案外重要なコードです。これがないと指定範囲外や空白のセルを指定した場合に、セルが選択されたままで、カーソルが点滅した状態でプログラムを抜けられなくなることがあります。無効な場合に”A1”セルに飛ぶことでこれを防ぎます。後で[Range("A1").Select]がない場合の動作を実験してみてください。

ワークシート上でセルをダブルクリックして、何かをしたいということはよくありますので、この方法も覚えておくと使えると思います。

(注意:プログラムの中に「次回以降で追加するプログラムはこの下に記述する」という箇所がありますが、これは次回以降で追加するプログラムも今回のプログラムを利用するので、記述する際は今回の位置を挿入の目安にしてください。)
続いてワークシートにファイルデータを表示するサブルーチンを作ります。
下記コードを上記サブルーチンの下に追加します。今回のコードを記述するところは特に断りのない限りすべて”Top"です。

3.”レース詳細(RA)”データを表示するサブルーチン[DisplayRADataOnWorksheet]
プログラムのポイント
読み込んだファイルのデータ数分だけ”RAデータ配列”をJVLink_Stluctモジュールのデータ関数にセットして、ファイルの内容を項目別に振り分け、振り分けた項目をワークシートに展開します。
ワークシートには最初にタイトルサブルーチンで項目を記入します。この項目および振り分けたデータについての詳細は実際のワークシートの結果を見てください。

データセット関数
上記のコードで Call SetData_RA(RaData(p), mRaData)というところがありますが、SetData_RA()がJVLinkモジュールの中に用意されているデータセット関数です。これを使うデータ(パラメータ)は、カッコの中の2つのデータ(引数)です。RaData(p)がp番目(ここでは全場所通算のレース)のデータを代入して、mRaDataというユーザー定義型変数にセットします。このmRaDataもJVLinkモジュールの中のJVData構造体定義を利用しています。このJVData構造体やデータセット関数についてはプログラムのヒントを参照ください。
4.”馬毎レース情報(SE)”データを表示するサブルーチン[DisplaySEDataOnWorksheet]
5.”払戻(HR)”データを表示するサブルーチン[DisplayHRDataOnWorksheet]
6.追加サブルーチン
”RA”のラップタイムから1着タイムを計算するサブルーチン[Chaku1TimeData]です。
このコードだけは標準モジュール(mMod3)に記述します。
速報値では一着タイムが明示されない(と思いました)ので、簡易計算で算出します。障害レースは対象外です。
以上が終わったら、いったん上書き保存してください。
7.プログラムを実行
ワークシートの”Top”シートに戻って、ファイル名のところをダブルクリックして別のワークシートに表示されれば成功です。
ただし、動くのは”RA_RACE”、”SE_RACE”、”HR_RACE”のファイル種別のものだけです。(”RA_RCOV”、”SE_RCOV”も動くと思います)ユーザーご自身で確かめてください。この段階では、かなり表示までに時間がかかると思います。
またデータ区分により表示される内容は変わります。

ページトップへ

 Copyright(C):Jaba 2000-2016