基礎編
ここからJV-Dataをダウンロードしてワークシートに表示するプログラムを作っていきます。
できあがり画面のイメージは下図の感じです。
(注意:この回では、途中で作成を中断すると次回起動時にエラーとなる場合がありますので、本文中の中断可否の記述に注意してください) |
できあがったNew_JVData_Explorerの使い方のイメージは、「最新」データを取得する場合と、取得済みの「過去」のデータを見る場合で異なります。
[最新開催週のデータを取得する場合]
(1)データ取得ボタン(3つ)で、データ種別ID別にJV-Dataをダウンロードします。
プログラムの都合上データを取得する順番を次のように決めます。
@最初に”レース補てん情報(RCOV)”の情報を取得し、
A次に”レース情報(RACE)”、
B最後に”速報系データ(0B系)(ゼロ・ビー系)”の取得という順番です(速報系データの場合は開催日を指定)。
実際には下のイメージ画面とはボタンの並びが変わる場合があります。(作る人が使うというプログラムなので、意地悪操作や誤操作をカバーするエラー対策は特に考慮しません)
(2)取得したデータのダウンロード状況を”C5”、”I5”セルに表示します。データの日付を”C3”のコンボボックスに表示します。
開催場所名は”E2”〜”E4”セルに表示します。
効率的に[RACE]データや[RCOV]データを取得する場合は、データ提供のFromTime情報を管理する必要がありますが、この情報を”C7”、”I7"セルに表示します。
このエリアを”基本データエリア”と称します。
(3)取得したJV-Dataのファイル名を表示するのが”ファイル名展開エリア”(各データ種別ごとに区別)です。取得したデータを準備編で作成したコピーフォルダ(\CopyData2)にセーブすると同時にファイル名を順次記入していきます。取得したファイル名をダブルクリックすると内容をデータ種別に応じたワークシートに展開します。
(完成画面の左側)
 |
(完成画面の右側) 実際には上図の右横に並ぶ
 |
[過去データを表示する場合]
(1)「取得済みのフォルダ名展開エリア」の開催週の行をダブルクリックすると”C3”セルのコンボボックスに開催週の日付がセットされるので、<過去データ表示>ボタンをクリックすると、その開催週のデータが最新開催週と同じように各データのファイル名展開エリアにファイル名が表示されます。
(注:過去データの場合、”速報系データ”は全開催日のデータが一括で表示されます)
(2)ファイル名をダブルクリックすると内容をデータ種別に応じたワークシートに展開します。
(3)”速報系データ”の場合は、開催日を選択して、<速報系データ取得>ボタンをクリックすると過去データを取得できる場合があります(1年以内)。<レース補てん情報取得>、<レース情報取得>ボタンの場合は、最新開催週のデータが優先となります。 |
1.JV-Linkモジュールの設定を確認するプログラムを作ります。 |
JV-LinkモジュールがインストールされていないとNew_JVData_Explorerは動作しません。ここではパソコンにJV-Linkがインストールされているかを確認し、もしインストールされていても利用キーが設定されていない場合は、自分で利用キーを設定できる画面を表示するプログラムを作ります。 |
下記のコードをモジュール(mMod0)に記述してください(これまでに作成したコードの下に追加)。
(1)JV-Linkモジュールを制御するサブルーチン(これも記述は”mMod0”です)[Set_JVLink_For_Worksheet]及び[JVLink設定]
JV-Linkの初期設定と利用キーの設定内容の確認(未設定の場合は入力する)画面を呼び出すサブルーチンです。
プログラムの説明
上の[Set_JVLink_For_Worksheet()]は、ワークシートに記述したマクロの場合にJV-Linkを設定するためのものです。
下の[JVLink設定()]は、JV-Linkの設定内容を確認する画面を表示するマクロです。中の[JVLink1.JVSetUIProperties]はJRA-VANから提供されるSDK(デザインキット)の中に含まれる専用関数でJV-Link画面を呼び出します。その前にJV-Linkを定義づけることが必要なので、上のマクロを呼び込んでおきます。
(注意)ここで中断して保存してもOKです。 |
(2)”初期設定”シートに下図のようにボタンを追加します。
追加したボタンのCaptionを[JV-Link設定]とします。
ボタンの作成方法や、既存の<Topシートへ>ボタンを移動するにはこれまでに作ってきた方法を参照してください。
CommandButton
Caption |
備考 |
Topシートへ |
作成済 |
初期ディレクトリ設定 |
作成済 |
JV-Link設定 |
今回作成 |
|
(3)<JV-Link設定>ボタンをダブルクリックします。これはデザインモードマークをオンにした状態(黄色の状態)で行ってください(ボタンの周囲の○点がある状態)。
表示される”初期設定”シートのモジュールに下記のように1行のコードを記述します。これは上記で作成したマクロ[JVLink設定]を呼び出すものですので、正確に同じ記述としてください。(JVとLinkの間の"-"(ハイフン)なし) |
[JVLink設定]を呼び出すコマンドボタン |
(4)次にデザインモードをオフにして(ボタン周囲の○点がない状態)、<JV-Link設定>ボタンをクリックして、今作成したプログラムを実行します。右図のような画面が出ます。”サービスキー設定”の欄に英数字の利用キーが表示されていればJV-Linkの設定は正常です。もし空欄の場合は、ユーザがお持ちの利用キーを入力して<OK>をクリックしてください。
[JVLink1.JVSetUIProperties]関数が右図の画面を呼び出します。
(注意)ここで中断して保存してもOKです。 |
 |
2.続いてモジュール(mMod0)にサブルーチンを記述します。 |
(1)次のコードを記述してください(mMod0に追加)。
サブルーチンは"RACE"、"RCOV"データの取得情報の時刻管理をするFromTimeに関するもので、読み込み(ロード)と書き込み(セーブ)の各2種類です。情報は初期ディレクトリで作成した\New_JVData_Explorerに保存されます。
[LoadFromTime_RACE]及び[SaveFromTime_RACE]
[LoadFromTime_RCOV]及び[SaveFromTime_RCOV]
プログラムのポイント
所定のフォルダに\fromtime_RACE.txtファイルがあればその内容(時間管理データ)を読み込み、なければ"00000000000000"(14個のゼロ)を出力として返すファンクションとしての機能。
fromtime_RACE.txtファイルには"RACE"データをダウンロードした際の日付時間情報(FromTime)が書き込まれます。
fromtime_RCOV.txtファイルには"RCOV"データの日付時間情報が書き込まれます。
|
(2)ワークシート上のデータをクリア(削除)するサブルーチンを作ります。[WorksheetFileListClear]及び[BashoClear]
”基本データエリア”の場所名欄(”E2”〜”E4”)と”ファイル名展開エリア”内のデータを削除する2つです。新たに書き込む前にいったんデータを削除するときに使います。これも記述は”mMod0”に追加して記述してください。
|
(3)ファイル名を表示するサブルーチン(これも記述は”mMod0”です)[ExpandFileData]
速報系以外のデータはいったんダウンロードするとFromTimeが同じ場合、ダウンロードできないので、セーブしたものを読み込む方法をとります。このためのサブルーチンです。表示するワークシートは"Top"です。
プログラムのポイント
「年月日」フォルダ(NENGAPPI)の中の"0B"系以外の".dat"形式のファイルを呼び出し、そのデータ種別やファイル名を”Top"シートの”B11"セル以下に表示する。(NENGAPPIフォルダは初期ディレクトリ設定で作成した\CopyData2の中に自動作成されていきます)。
".dat"形式のデータのdataspecにより、データの種類を判断します。
コードが長いですが、繰り返しが多いだけです。
ファイルを探すのに Dir関数を使い、Do While/Loop でフォルダ内のファイルを読み出しています。この使い方は参考書にもよく出てくる基本的なパターンで、応用範囲が広いので慣れておくといいと思います。
表示に必要なファイル数(FileSu)はdatファイルの大きさをデータサイズで割り算して求めています。
取得するファイルをRACE系のファイルとRCOV系のファイルの2種類に分けます。RCOV系のファイルは通常土日分のマスターデータを含みますので、ファイル名の末尾に"R"を付加します。RACE系は当日データなので、日付別にファイル名を付けます。
(注意)ここで中断して保存してもOKです。 |
3.今度はワークシート("Top")に記述するサブルーチンを作ります。 |
下記コードを標準モジュール(mMod0)に記述します。[Worksheet_Activate]及び[Sh1Ac]
このマクロは”Top”シートがアクティブになったときに”開催週情報”を確認するためのものです。
(注意)ここでは中断せず、続いて下記も作成してください。 |
4.今度はThisWorkbookというモジュールにコードを記述します。
通常はあまり使わないモジュールですが、Excelが最初に開かれたときの処理を記述します。
VBE画面で左のプロジェクトウィンドウの下の方に”ThisWorkbook”というモジュールがありますので、これをダブルクリックしてください。

左側のプルダウンメニューから"Workbook"を選び、右側のプルダウンメニューから”Open”を選択してください。


開いた右側のコードウィンドウに下記のコードを記述してください。[Workbook_Open]
ExcelをオープンしたときにFromTime情報を読み込む動作と、Excelを終了するときに”Top"シートを表示するサブルーチンです。
このコードウィンドウの一番上に"Option Explicit"を追加しておくとスペルミスの場合に警告が出るので便利です。
ワークブックを閉じたときに上書き保存して終了するコードを追加します。記述するモジュールは"ThisWorkbook"です。左側のプルダウンメニューで”Workbook”を選び、右側のプルダウンメニューから”BeforeClose”を選択します。”Workbook_BeforeClose”サブルーチンが開きます。


この中に下記のコードを記述します。[Workbook_BeforeClose]
(注意)ここでは中断せず、下記も作成してください。 |
5.ワークシート(”Top”)上に項目名と日付用コンボボックスを配置します。
下図を参考にして、”Top”シートに下記のように見出し項目を記入してください。
[共通エリア]
(1)ソフトのタイトル:セル(”B1”)に[New_JVData_Explorer]と記入。本ソフトの名前です。
(2)セル(”B3”)に[開催日]と記入。
コンボボックスの配置は、@まず”コントロールツールボックス”でデザインモードをオンにして、コンボボックスをクリックし、Aセル”C3”に貼り付けます。セル幅は後でも変更できるので、とりあえず適当な幅にしてください。
(3)セル(”D2”〜”D4”)に[場所1]〜[場所3]を記入。罫線やセル色はセルの書式設定で適宜行ってください。
[”RCOV”データエリア]
(1)セル(”B5”)に[データ取得]と記入。取得したデータの進捗状況を”C5”に表示するのはプログラムで行います。
(2)セル(”B7”)に[RCOV_FromTime]と記入。”C7”に取得したデータの日付情報を表示するのはプログラムで行います。
(3)セル(”B9”)に[RCOV_File]と記入。”C9”にはプログラムでファイル数を表示します。
(4)10行目に項目を記入。セル(”B10”)に[ファイル種別]、”C10”に[ファイル名]、”D10”に[年月日]、”E10”に[区分]、”F10”に[データ数]と記入。実際のデータを展開するのは11行目以下になります。
[”RACE”データエリア]
(1)セル(”H5”)に[データ取得]と記入。取得したデータの進捗状況を”I5”に表示するのはプログラムで行います。
(2)セル(”H7”)に[RACE_FromTime]と記入。”I7”に取得したデータの日付情報を表示するのはプログラムで行います。
(3)セル(”H9”)に[RACE_File]と記入。”I9”にはプログラムでファイル数を表示します。
(4)10行目に項目を記入。セル(”H10”)に[ファイル種別]、”I10”に[ファイル名]、”J10”に[年月日]、”K10”に[区分]、”L10”に[データ数]と記入。実際のデータを展開するのは11行目以下になります。

[”速報系”データエリア]
(1)セル(”N5”)に[データ取得]と記入。取得したデータの進捗状況を”O5”に表示するのはプログラムで行います。
(2)セル(”N9”)に[速報系_File]と記入。”O9”にはプログラムでファイル数を表示します。
(3)10行目に項目を記入。セル(”N10”)に[ファイル種別]、”O10”に[ファイル名]、”P10”に[年月日]、”Q10”に[区分]、”R10”に[データ数]と記入。実際のデータを展開するのは11行目以下になります。
[取得済みデータエリア]
(1)セル(”T9”)に[取得済みデータ]と記入。”U9”、”V9”にはプログラムでファイル数を表示します。
(2)10行目に項目を記入。セル(”T10”)に[RCOV年月日]、”U10”に[開催日1]、”V10”に[開催日2]、”W10”に[開催日3]と記入。11行目以下に実際の開催週や開催日データを表示します。

プログラムの記述
@開催日付を探すサブルーチン[GetKaisaiDateInfo](これも記述は”mMod0”です)
実際の動作ではダウンロードしたJV-Dataは\CopyData2の中の「年月日」フォルダにセーブされます。このサブルーチンは\CopyData2にある全フォルダを検索し、最新の開催日日付のフォルダを探します。実際には"RCOV"データを元に探すので、通常は土日分の2つのフォルダをピックアップします。
プログラムのポイント
いったん、所定のディレクトリの中の「年月日」フォルダをすべて仮配列(DateFileX)にいれ、次に逆順に「年月日」フォルダを検索すると新しい日付順になるので、”R”のついた年月日フォルダまでを今週分のデータとして配列(DateFile)に記入します。”R”付フォルダには共通のマスタデータ(RCOV)がセーブされています。
取得済みの過去データは追加分があればフォルダに追記します。
これが一番ややこしいプログラムかもしれません。もっと簡単な方法があると思いますが・・・
Aコンボボックスに開催日日付をセットするサブルーチン[SetKaisaibiDateToComboBox]
ワークシート("Top")に配置した日付表示用のComboBox1に日付をセットするサブルーチンです。通常は今日の日付を表示します。(これも記述は”mMod0”です)
B既存の初期ディレクトリデータを確認するサブルーチン[CheckInitialDirectory]の追加
まだ新しいNew_JVData_Explorerは完成していませんが、もし完成後にできたプログラムを他のパソコンに移動した場合に初期ディレクトリがないとエラーになるのを防ぐためのマクロです。
このマクロは次の状況をチェックします。
(a)初期設定シートのセル(”A2”〜”D2”)のどれかが空白の場合・・・新規設定とみなします。
(b)初期設定シートが設定済みの場合・・・新しいパソコンにはまだ実際のデータがなければエラー表示します。
いずれの場合も初期設定シートで再度初期設定を行うことで動作ができます。
(注意)ここまで作成後に中断して保存してもOKです。
一度、上書き保存して本ソフトを終了してください。(終了せずに下記を続けてもかまいません) |
6.いったん上書き保存してから閉じて、再度「New JVData Explorer」を起動してください。
下図のようにFromTimeには"00000000000000"とコンボボックスに今日の日付が表示されれば正常です。

コンボボックスの日付欄の字体がにじんだようなきたない文字で気に入らない場合は、ボックスの大きさを変えるか、あるいは下図のようにフォントサイズを調整してください。
「表示」メニューでコントロールツールボックスを表示し、デザインモードにした状態でコンボボックスをクリックし(周囲に○がつく)、再度ツールボックスのプロパティをクリックするとプロパティウィンドウが出ます。

”Font"部分をダブルクリックすると図のダイアログが出るので適当なフォントサイズにして<OK>をクリックします。図では元のサイズ"12"を"9"に変更した例です。再度"Top"シートのコンボボックスの大きさを適当に調整してください。終わったらデザインモードを終了し、ツールボックスを閉じてください。
 |
いかがですか。ここまでうまくいきましたか。
JV-Dataのダウンロードプログラムになかなか進みませんが次回は行けると思います。 |