出走馬の勝負気配をオッズから読み取る
馬連で勝負をして、せっかく馬券が当たったのに枠連の方が配当がよくてガッカリという経験をした人も多いかと思います。普通は枠連<馬連<馬単の順に配当が高くなりますが、時にそれらの配当の逆転現象が見られます。これは特定馬について勝負気配ありの情報を得た人たちが、勢い馬券をその馬から流して馬連や馬単で全力勝負した結果、配当が枠連>馬連になると考えられます。しかし締切時間が近づくにつれ枠連が買い増され逆転現象が解消されることもあります。
そんな枠連と馬連の関係を攻めていきます。調教や厩舎コメントなどはいっさい考慮せず、たんにオッズから勝負気配のある馬を読み取り、オッズのフォントを赤くするマクロです。
ここまでの流れを整理してみましょう
この回では第3回から第7回までのマクロができていることとします。参考までにこれまでのモジュール名とプロシージャ名を記しておきます。

- 第3回:出馬表とオッズの取得
- a_オッズの取得
- {Sub}出馬表複写()
- a_オッズの取得
- 第4回:オッズを見やすく表に整形
- a_オッズの取得
- {Sub}odds表作成()
- a_オッズの取得
- 第5回:オリジナル出馬表を作成する(第8回では使わない)
- b_出馬表作成
- {Sub}出馬表作成()
- b_出馬表作成
- 第6回:券種ごとの単勝人気順オッズテーブル作成
- c_テーブル人気順
- {Sub}人気順オッズテーブル()
- c_テーブル人気順
- 第7回:単勝人気順の組合せでオッズを表示
- d_人気順のオッズ
- {Sub}人気順オッズ縦並べ()
- d_人気順のオッズ
第7回で作った単勝人気順の組合せで表示した縦並べの枠連と馬連のオッズを比較して勝負気配の馬を推理していきます。

セルのカラー情報を取得する
最初に挿入〜標準モジュールを追加して任意の名前をつけてください。ここでは「e_オッズの彩色」とし、「Subオッズ彩色()」のプロシージャ名で以下のマクロを書いていきます。まず枠連や馬連の枠色に彩色されたセルの色、例えば4枠は青なので「カラーindexは23」というように色番号を取得します。
Sub オッズ彩色() '============================================ '(Previewシートの縦並べオッズを使って) '枠連より馬連の方が売れているかをチェックし _ 双方のオッズを設定に従い赤字や青字にする '============================================ Dim i As Long, j As Long Dim iroA As Long '枠連軸の塗り色 Dim iroB As Long '枠連ヒモの塗り色 Dim iroC As Long '馬連軸の塗り色 Dim iroD As Long '馬連ヒモの塗り色 Dim n As Long, m As Long Dim wHaito As Single '枠連配当 Dim uHaitoA As Single '馬連配当 Dim uHaitoB As Single '馬連配当に10%増のゲタをはかせる Dim ws2 As Worksheet Set ws2 = Worksheets("Preview") n = ws2.Cells(Rows.Count, "p").End(xlUp).Row '枠連の最終行 ’1 m = ws2.Cells(Rows.Count, "t").End(xlUp).Row '馬連の最終行 'Previewシートの枠連の軸枠とヒモ枠のカラー情報取得 For i = 7 To n ’2 With ws2 If IsNumeric(.Cells(i, "r").Value) = True Then '3IsNumericで指定した値が数値かどうかを判定します iroA = .Cells(i, "p").Interior.ColorIndex '軸枠の塗り色 '4 iroB = .Cells(i, "q").Interior.ColorIndex 'ヒモ枠の塗り色 wHaito = .Cells(i, "r") '枠連配当 End If End With 'Previewシートの馬連の軸馬とヒモ馬のカラー情報取得 For j = 7 To m '5 With ws2 If IsNumeric(.Cells(j, "v").Value) = True Then 'IsNumericで判断 iroC = .Cells(j, "t").Interior.ColorIndex '軸馬の塗り色 '6 iroD = .Cells(j, "u").Interior.ColorIndex 'ヒモ馬の塗り色 uHaitoA = .Cells(j, "v") '馬連配当 '7 End If End With uHaitoB = 80 / (80 / uHaitoA * 1.1) '8 ゲタは「1.1」と、1割増にする ’↓ 下に続く
- 第7回でPreviewシートに作った枠連と馬連の組合せ縦並べ最終行を取得します
引数i、引数jの最終値に使用します - 枠連・馬連の縦並べ組合せがセルP7から始まるので、変数「i」の初期値は7になります
- IsNumeric関数で当該セルcell(i,”r”)が数値かどうか判定します。数値なら配当が入力されているので後に記述した処理を実行します
- 軸枠cells(i,”p”)のセル色番号を変数iroAに格納
ヒモ枠cells(i,”q”)のセル色番号を変数iroBに格納 - 馬連の繰り返し回数は、変数Nで最終行を取得しているのでJ=7toN
- 軸馬cells(j,”t”)のセル色番号を変数iroCに格納
ヒモ馬cells(j”u”)のセル色番号を変数iroDに格納 - uHaitoAにcells(j,”v”)の配当を格納します
- uHaitoBには実際の配当uHaitoAに10%の誤差範囲を設定し、それを上乗せしました
↑ 上から続く '--------------------------------------- '馬連が枠連より売れているか調べる _ ---------------------------------------- '馬連に比べ枠連の方が配当が高い時にフォントを赤にする If iroA = iroC And iroB = iroD _ '1 And wHaito > uHaitoA Then ws2.Cells(i, "r").Font.ColorIndex = 3 '2 ws2.Cells(i, "r").Font.Bold = True '太字 ws2.Cells(j, "v").Font.ColorIndex = 3 ws2.Cells(j, "v").Font.Bold = True '太字 'ゲタをはかせた馬連に比べ _ '3 枠連の方が配当が高い時にフォントを青にする ElseIf iroA = iroC And iroB = iroD _ And wHaito > uHaitoB Then ws2.Cells(i, "r").Font.ColorIndex = 23 '4 ws2.Cells(i, "r").Font.Bold = True '太字 ws2.Cells(j, "v").Font.ColorIndex = 23 ws2.Cells(j, "v").Font.Bold = True '太字 End If Next j Next i End Sub
- iroA(枠連の軸枠)とiroC(馬連の軸馬)の色が同じ、
かつiroB(枠連のヒモ枠)とiroD(馬連のヒモ馬)の色が同じ、
かつwHaito(枠連の配当)がuHaito(馬連の配当)より高い場合は次の処理をします - R列対象行の枠連配当セルのフォントを赤色にして、太字にします
V列対象行の馬連配当セルのフォントを赤色にして、太字にします - uHaitoAの10%を上乗せしたuHaitoBよりwHaitoが高い場合次の処理をします
- R列とV列対象行のフォントを青色にし太くしています
まとめて実行
第3回「a_オッズの複写〜Sub出馬表複写」で<cntl+a>と<Tabキー>を使ってInpOdsシートにオッズを複写しました。複数のプロシージャを一連の処理として実行するCallステートメントがあります。それを使って複写後のodds表作成からオッズ彩色まで、まとめて実行してみます。
以下のマクロを任意の場所に書いてください。ここではCallステートメントで呼び出すプロシージャをまだ追加したいので、分かりやすいb_出馬表作成のSub出馬表作成()の上部に書き足します。
標準モジュール b_出馬表作成 Option Explicit Dim ws2 As Worksheet, ws3 As Worksheet Dim ws4 As Worksheet, ws5 As Worksheet Dim tosu As Long Dim rowTop As Integer Dim c As Range Sub 実行() Application.ScreenUpdating = False '1 画面更新停止(計算中は画面が固定) Call odds表作成 '2 Call 出馬表作成 '<A> Call 人気順オッズテーブル Call 枠連人気順縦並べ Call 馬連人気順縦並べ Call 馬単人気順縦並べ Call オッズ彩色 Set ws2 = Worksheets("Preview") ws2.Activate '3 Range("a1").Select Application.ScreenUpdating = True '画面更新再開 '4 End Sub Sub 全消去() '5 Set ws2 = Worksheets("Preview") Set ws3 = Worksheets("InpOds") Set ws4 = Worksheets("Calc") 'Prev_tableの消去 ws2.Range("b7:n24").Clear 'Prev_oddsの消去 ws2.Range("p6:ax420").Clear ws2.Range("p6:ax420").UnMerge 'InpOds消去 ws3.Range("b7:r364").ClearContents 'Calcシートの消去 ws4.Range("b3:r20").Clear ws4.Range("s25:aw86").Clear End Sub Sub 出馬表作成()に続く
- Application.ScreenUpdating=Falseで画面更新を止めると無駄な表示がなくなり、処理を高速化することができます
ちなみに更新を止めない場合と比較するとその速さが分かると思います - Callステートメントでプロシージャodds表作成を呼び出し終了後、次の<A>のステートメントに制御が移ります(以下同様です)
- 全Callステートメント終了後、”Preview”シートをアクティブにしてセル範囲a1を選択します
- Application.ScreenUpdating=Trueで画面更新を再開します
- “Preview”、”InpOds”、”Calc”シートの入力範囲のデータを
Clear⇒全体(数式・文字・書式・コメント全て)をクリアします
ClearContents⇒数式と文字を削除します
UnMerge⇒セルの結合を解除します
InpOdsシートにコマンドボタンを配置
プロシージャ<Sub実行>を作ったからには快適に操作したいですね。InpOdsシートに<Cntl+a>と<Tabキー>を使って出馬表とオッズをペーストしたら配置したコマンドボタンから実行します。

- コマンドボタン<実行>をクリックすることにより、ボタンに登録したマクロの「Sub実行()」が処理されます
- コマンドボタン<全消去>をクリックすることにより、ボタンに登録したマクロの「Sub全消去()」が処理されます
消去範囲は18頭立のケースで<実行>して、セル位置を確認してください
実行後の表示画面

表示画面は2023年2月19日 1回東京8日目11Rのフェブラリーステークス計算結果です。枠連11.4倍に対して馬連9.7倍と、枠連の方が配当が良いですね。普通は数頭の馬から売れるので、こんなに分かりやすいケースはあまりありませんが、勝馬検討の参考になります。少頭数だと枠連の方が配当が良い組合せがほとんどの時もあります(笑い)。次回は出馬表と枠連>馬連の配当を使って連対馬潜伏枠を推理します。
コメント