【Excel】2020年12月JRAホームページ更新によるコピペシステム ExcelVBAの変更履歴を記す

目次

毎年12月初旬にJRAホームページの更新がある

アナウンスなしで12月初旬の月~火あたりの深夜にポンと変更になっていることが多い。大幅なテキスト表示位置が前週と違う場合は、プログラム修正に時間が掛かる場合があるのでコピペツールだけ走らせて1R~12Rまでのコピペ内容だけとりあえず保存しておく。データ加工だけVBA完成時にまとめて走らせる。2019年は下記③のテキスト格納仕様が私にとっては「改悪」だったので、かなり時間が掛かってしまった。またこの年は馬毎のレース「コーナー通過順位」も追加になりデータベースもいじることになった為、更にプログラム修正とテストに時間を費やすことになった。

2020年:JRAホームページ変更点は大きくは下記4点

①オッズ・出馬表・レース結果・払戻 画面とそれぞれのレース選択画面6画面

  • 「オッズ」 と オッズ「レース選択」
  • 「出馬表」 と 出馬表「レース選択」
  • 「レース結果」 と レース結果「レース選択」 

②出馬表レース選択画面配置が大幅変更

  • レース名
  • コース・距離・頭数
  • 出馬表・オッズ・レース結果

コピペ時テキストのずれと、クリック位置が「レース番号」から「出走表」に移動になり「レース番号」を押しても該当レースにはいけない仕様変更。

※オッズ・レース結果は従来通り、「レース番号」から該当レースにいける。

③該当レース画面下、配当金欄テキスト格納方法が2018年仕様に戻る

2019年12月変更で払戻金テキスト格納方法が変更になったが、今回2018年仕様に戻る。これはコピペしている私にとっては改良になる。(戻っただけなんだけどね)

④払戻画面の画面比が他と同じになった。

※払戻情報は、該当レース下から取得可能なため、払戻画面からの作業はない。

出馬表 レース選択の画面 2021年度仕様

出馬表 赤枠で括弧っている箇所が変更された箇所

出馬表 レース選択の画面

今回から出馬表はレース番号を押しても出馬表に飛ばない。レース右横の「出馬表」を押す。

出馬表 の画面

※レース結果や最終オッズと違い、出馬表は次週の木曜日には消えてしまうので、水曜日までにコピペ保存しておかなければならない。

上記赤枠4か所で一番の変更点は、コース・距離・頭数が一枠になったこと

以外かも知れないが、プログラム的にはクリック位置が変更になるのは、座標を変更するだけなのでそれほど大きな変更にはならない。但し潜在的なバグを内包するようなプログラム仕様だとクリック位置がズレてしまうなどの根本的な改造が必要になる場合もある。

コース・距離・頭数 をコピペすると 2021年仕様だとこうなる。

2020年12月6日(日曜) 3回中京2日
ご覧になりたいレースの出馬表ボタンをクリックしてください。
注記:コース・距離・頭数の「m」はメートル全てのレースを表示
レース番号 発走時刻 レース名 変更 コース距離頭数 馬体重 出馬表 オッズ レース結果 レース映像 WIN5
1レース 9時55分 2歳未勝利(混合)[指定] ダート1,800m13頭 出馬表 未発表 未確定
2レース 10時25分 3歳以上1勝クラス(500万下)[指定] ダート1,200m16頭 出馬表 未発表 未確定
3レース 10時55分 3歳以上1勝クラス(500万下)牝[指定] ダート1,800m10頭 出馬表 未発表 未確定
4レース 11時25分 2歳未勝利(混合)[指定] 芝1,200m18頭 出馬表 未発表 未確定
5レース 12時15分 メイクデビュー中京 芝1,400m14頭 出馬表 未発表 未確定
2歳新馬(混合)[指定]
6レース 12時45分 3歳以上1勝クラス(500万下)(混合)[指定] ダート1,800m10頭 出馬表 未発表 未確定
7レース 13時15分 3歳以上1勝クラス(500万下)[指定] 芝2,200m18頭 出馬表 未発表 未確定
8レース 13時45分 3歳以上1勝クラス(500万下)(混合)[指定] ダート1,400m16頭 出馬表 未発表 未確定
9レース 14時15分 こうやまき賞 芝1,600m8頭 出馬表 未発表 未確定
2歳1勝クラス(500万下)(混合)(特指)
10レース 14時50分 中京日経賞 芝1,200m18頭 出馬表 未発表 未確定 ウインファイヴ 1レース目
3歳以上2勝クラス(1000万下)(混合)[指定]
11レース 15時30分 チャンピオンズカップGⅠ ダート1,800m16頭 出馬表 オッズ 未確定 ウインファイヴ 4レース目
3歳以上オープン(国際)(指定)
12レース 16時15分 鳴海特別 ダート1,400m16頭 出馬表 未発表 未確定
3歳以上2勝クラス(1000万下)(混合)[指定]
ページトップへ戻る
馬券は20歳になってから
JRAのギャンブル等依存症対策
サイトマップ
リンク
ご利用に際して
Horse Racing in Japan
Copyright © Japan Racing Association All rights reserved.

2020年仕様だと、こうなる。

2019年12月1日(日曜) 4回中京2日
天候晴
芝良
ダート良
開催選択へ戻る
ご覧になりたいレースの出馬表ボタンをクリックしてください。
全てのレースを表示
出馬表 発走時刻 競走名 変更 距離 馬場 頭数 馬体重 WIN5
1レース 9時55分 2歳未勝利(混合)[指定] 1,800メートル ダート 15頭
2レース 10時25分 3歳以上1勝クラス(500万下)牝[指定] 1,200メートル ダート 16頭
3レース 10時55分 3歳以上1勝クラス(500万下)(混合)[指定] 1,900メートル ダート 7頭
4レース 11時25分 2歳未勝利(混合)[指定] 1,200メートル 17頭
5レース 12時15分 メイクデビュー中京 1,400メートル 14頭
2歳新馬(混合)[指定]
6レース 12時45分 3歳以上1勝クラス(500万下)[指定] 1,800メートル ダート 11頭
7レース 13時15分 3歳以上1勝クラス(500万下)(混合)[指定] 2,000メートル 14頭
8レース 13時45分 3歳以上1勝クラス(500万下)[指定] 1,400メートル ダート 14頭
9レース 14時15分 桑名特別 1,200メートル 18頭
3歳以上1勝クラス(500万下)[指定]
10レース 14時50分 名古屋日刊スポーツ杯 2,000メートル 10頭 ウインファイブ1レース目
3歳以上2勝クラス(1000万下)(混合)(特指)
11レース 15時30分 チャンピオンズカップGⅠ 1,800メートル ダート 16頭 ウインファイブ4レース目
3歳以上オープン(国際)(指定)
12レース 16時15分 鳴海特別 1,400メートル ダート 16頭
3歳以上2勝クラス(1000万下)(混合)[指定]
ページトップへ戻る
馬券は20歳になってから
ギャンブル障害への対応
サイトマップ
リンク
ご利用に際して
Horse Racing in Japan
Copyright © Japan Racing Association All rights reserved.

今回の2021年仕様の方がデータ化するのに難易度が高いセル格納になっている。

  • 上記は コース・距離・頭数が1セルに格納されている。
  • 上記は、1~4、6~8Rが1行、5、9~12Rが2行仕様になっている。
  • 下記は、「距離」と「馬場」と「頭数」が違うセルに格納されている。
  • 下記は、全てのレースが2行仕様になっている。

※この変更分は難易度が増している2021年仕様のみプログラム公開しておく。

コース・距離・頭数が1セルに格納されている場合の文字列操作

コピペで’HEAD’に貼付、VBAで加工’出走RH’にデータ化(変更箇所抜粋)

'2020.12.02これ以降全て変更
'競走名(レース名)'競走条件など
            wk_nm1 = Sheets("HEAD").Cells(RET + 1, 1)
            If CHRCVT(wk_nm1) = "" Then
                Sheets("出走RH").Cells(LC + 1, 7) = Sheets("HEAD").Cells(RET, 3)
                Sheets("出走RH").Cells(LC + 1, 8) = Sheets("HEAD").Cells(RET + 1, 3)
            Else
                Sheets("出走RH").Cells(LC + 1, 7) = ""
                Sheets("出走RH").Cells(LC + 1, 8) = Sheets("HEAD").Cells(RET, 3)
            End If
'馬場
'replace後、2文字目'→'なら3文字セット
            Sheets("出走RH").Cells(LC + 1, 10) = Sheets("HEAD").Cells(RET, 5)
            wk_nm1 = Sheets("出走RH").Cells(LC + 1, 10)
            wk_nm2 = Replace(wk_nm1, "ダート", "ダ")
            If Mid(wk_nm2, 2, 1) = "→" Then
                Sheets("出走RH").Cells(LC + 1, 10) = Left(wk_nm2, 3)
            Else
                Sheets("出走RH").Cells(LC + 1, 10) = Left(wk_nm2, 1)
            End If
'出走頭数
            Sheets("出走RH").Cells(LC + 1, 11) = myNo1(Right(Sheets("HEAD").Cells(RET, 5), 3))
'距離
            Sheets("出走RH").Cells(LC + 1, 9) = Sheets("HEAD").Cells(RET, 5)
            wk_nm1 = Sheets("出走RH").Cells(LC + 1, 9)
            wk_nm2 = myNo1(Left(Replace(wk_nm1, "ダート", "ダ"), 6))
            Sheets("出走RH").Cells(LC + 1, 9) = wk_nm2

※myNo1だけ自作関数(下記に記載)

myNo1 は、自作関数

Function myNo1(r As String)
'
'文字列から数字だけを取り出す
'
  Dim myStr As String
  Dim myN As String
  Dim CNT As Integer
    For CNT = 1 To Len(r)
        myStr = Mid(r, CNT, 1)
        If myStr Like "[0-9]" Then
            myN = myN & myStr
        End If
    Next CNT
    If IsNumeric(myN) Then
        myNo1 = myN * 1
    Else
        myNo1 = ""
    End If
End Function

可変行は’1レース’~’12レース’で文字列検索し変数RETに行を返す。

Function myLC(r As String, sh As String)
'
'文字列rが何行目にあるか(SHEET sh=sh_nmを1000行まで検索する)
'戻り値:発見した最初の行を返す
'
    Dim CNT As Integer
      Sheets(sh).Select
      myLC = 0
      For CNT = 1 To 1000
        If Cells(CNT, 1) Like r & "*" Then
            myLC = CNT
            Exit For
        End If
      Next CNT
End Function
Excel VBA 逆引き大全 600の極意 Microsoft 365/Office 2021/2019/2016/2013対応

Excel VBA 逆引き大全 600の極意 Microsoft 365

※私が持っているのが2016年版(以下は2016)

  1. ExcelVBAの基本構文
  2. セルの操作
  3. 関数
  4. ワークシート、ウィンドウの操作
  5. ブック操作
  6. データ操作
  7. テーブル・ピボットテーブル
  8. 図形
  9. グラフ
  10. ユーザーフォーム
  11. 印刷
  12. ファイルとフォルダ
  13. データ連携
  14. イベント
  15. バージョン・トラブルシューティング・エラー処理
  16. 高度なテクニック
  17. 索引

目次が巻頭で検索が巻末。昔のタイプの本の構成だが、索引がページでなくTipsという見出しNo.になっていて慣れるまでは検索しづらい。
Amazonレビューは★3.9

私のKindle-Unlimited評価は★4

完成した出走RHデータベースのテーブル内容

開催日 曜日 場名 日目 競走名 競走条件 距離 ダ芝 出走頭数 WIN5 発走時刻 変更
2020/12/06 1 中京 3 2 1 2歳未勝利(混合)[指定] 1800 13 9時55分
2020/12/06 1 中京 3 2 2 3歳以上1勝クラス(500万下)[指定] 1200 16 10時25分
2020/12/06 1 中京 3 2 3 3歳以上1勝クラス(500万下)牝[指定] 1800 10 10時55分
2020/12/06 1 中京 3 2 4 2歳未勝利(混合)[指定] 1200 18 11時25分
2020/12/06 1 中京 3 2 5 メイクデビュー中京 2歳新馬(混合)[指定] 1400 14 12時15分
2020/12/06 1 中京 3 2 6 3歳以上1勝クラス(500万下)(混合)[指定] 1800 10 12時45分
2020/12/06 1 中京 3 2 7 3歳以上1勝クラス(500万下)[指定] 2200 18 13時15分
2020/12/06 1 中京 3 2 8 3歳以上1勝クラス(500万下)(混合)[指定] 1400 16 13時45分
2020/12/06 1 中京 3 2 9 こうやまき賞 2歳1勝クラス(500万下)(混合)(特指) 1600 8 14時15分
2020/12/06 1 中京 3 2 10 中京日経賞 3歳以上2勝クラス(1000万下)(混合)[指定] 1200 18 1 14時50分
2020/12/06 1 中京 3 2 11 チャンピオンズカップGⅠ 3歳以上オープン(国際)(指定) 1800 16 4 15時30分
2020/12/06 1 中京 3 2 12 鳴海特別 3歳以上2勝クラス(1000万下)(混合)[指定] 1400 16 16時15分

レース結果は2021年仕様で簡単になったのでココでは省略

  • 「枠番」が「枠」になった。
  • 「ブリンカー」が「ブリンカー着用」になった。
  • 一番大きな変更箇所はレース結果下の払戻が1セルに馬番・払戻・人気が1行1セルごとに改良されている(2019年仕様に戻る)

編集後記

今回のプログラム修正中にこんなデータを見つけたので、競馬ファンなら既に知っていることだとは思うが、なかなかスゴイことだよね~データ枠取ってなかったらデータベースからいじらないとダメだからプログラマーの経験値を試されるお題を投げてくるよね( 一一)

2020年11月23日(月曜) 5回阪神7日 12Rで3着同着3頭という奇跡

わたしゃ、ワイドは3-3着もあるのかな?と思ってデータベースは10個テーブル枠を設けていたが1-2着、1-3着、2-3着の7つでよかったみたいだ。

目次