1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel標準機能だけで“競馬予測モデル”を作った話:最少機能で構造化する設計思想

1
Last updated at Posted at 2026-02-14

はじめに

なぜ Excel の標準機能だけで競馬ツールを作ろうと思ったのか

理由はシンプルで、
「Excel の最少機能だけで実装した場合、今の自分の限界がどこにあるのか知りたかった」
から

普段はフルスタックで開発できるが、あえて制約をかけることで
抽象化・モデル化・UI設計の腕試し をしたかった


この記事のターゲット

  • エンジニア: 制約下でのモデリングや抽象化のプロセスに興味がある方
  • 競馬ファン: プログラミングはできないが、Excelで独自の分析ツールを作りたい方

この記事の目的
高度な言語(Python等)を使わずとも、Excelの「関数と設計」だけでここまで本格的な予測モデルが組めるというプロセスを共有すること

環境

Microsoft Excel 2021
(標準機能のみ、VBAなし)

目的

競馬の血統に注目した指数ランキング可視化システム

目的は大きく3つある

  1. 競馬初心者の血統入門ツールを作りたい
  2. 特殊な技術を使わない疑似ノーコードの実装に挑戦したい
  3. 自分が使いたかったから

設計思想

血統には多くの特徴量があるが、今回は
種牡馬の可能性に重きを重きを置いた

抽出した特徴量は以下の通り:

  • 距離
  • 会場
  • 枠番
  • 馬場状態

これらを点数化し、
総合点 → レース内で相対評価 → ランキング化
という流れで指数を作る

モデル化

すべての要素を芝/ダートに分別

  1. 距離:数値化
  • 1000m〜2300m
  • おおよそ200m刻み
  • 非根幹距離(1700m)も含む
  1. 馬場:カテゴリ化
    良 / 稍重 / 重 / 不良
  2. 枠番:数値
    1~8枠
  3. 会場:カテゴリ化
  • 中央競馬全会場
  • 南関競馬4会場(地方対応ツールが少ないため採用)

実装:シート準備

まずはシートを作る

  • 距離
  • 会場
  • 枠番
  • 馬場状態
    image.png

それぞれのシートに馬名を入れる
例は下記
image.png

距離シート

芝・ダートに分けて距離別に列を作る
image.png

馬場状態シート

芝・ダートに分けて馬場状態別に列を作る
image.png

枠番シート

芝・ダートに分けて枠番別に列を作る
image.png

会場シート

芝・ダートに分けて会場別に列を作る
南関競馬はダートしかないので、ダートが少し長くなる
image.png


それぞれのシートに点数を記載

・評価点は
◉>◎>◯>△>×
で記載する

距離別シートの例
image.png

シートの準備はここまで

実装:詳細計算

まずは完成図を提示
image.png

B~G列はコンボボックスを採用
image.png
※馬名のコンボボックスは距離別シートを参照

=距離別!$A$5:$A$240

I~P列に関しては

  1. 各シートより評価を抽出
  2. 抽出した評価を数値に変換

という処理を行っている
image.png

式の基本形は下記

=IFERROR(
  SWITCH(
    XLOOKUP($D3,距離別!$B$4:$J$4,
      XLOOKUP($B3,距離別!$A$5:$A$240,距離別!$B$5:$J$240)
    ),
    "◉",4, "◎",3, "◯",2, "△",1, "×",0
  ),
"")

総合点は足しているだけ
ただし、全部空欄なら何も表示しない

=IF(COUNT($I3,$K3,$M3,$O3,$Q3,$S3)=0, "", SUM($I3,$K3,$M3,$O3,$Q3,$S3))

空白にしている理由

後述する「指数ランキング」の評価に関わるが

  • 0点:データはあるが、評価は最低の「E」
  • 空白:まだ評価点を記載していない

と明確に使い分けるために、あえて空白にしている

実装:指数ランキング

上記で作成した詳細シートをコピーする
完成形は下記
image.png

総合点ランクを同レース内で相対的に評価してランキング化する
指数ランキングは
S~E
Sが最高
までの評価となる

W,X列に入っている評価式は下記

=IFS(
    U3="", "",
    U3=0, "E",
    RANK.EQ(U3,$U$3:$U$100,0)=1, "S",
    U3>=PERCENTILE.INC($U$3:$U$100, 0.85), "A",
    U3>=PERCENTILE.INC($U$3:$U$100, 0.6), "B",
    U3>=PERCENTILE.INC($U$3:$U$100, 0.3), "C",
    TRUE, "D"
)

色付けは条件付き書式で実装
image.png

UI設計の意図

  • 視覚的なわかりやすさを重視
  • Sランクや◯✕方式の方が初心者に優しい
  • 点数を表示し、指数の透明性を担保

学んだこと

  • コードが書かれていない分、非常に軽く動作する
  • 関数を古い関数に戻せば互換性も担保できる
  • 設計段階で理想形を持つことの重要性
  • Excel単体でも“モデル化”は十分可能

スマホでも、動く

このExcelはクラウドを経由すると
スマホからフル機能を使える

競馬場のパドックで、スマホ片手に条件を書き換える
すると、最新のランキングを弾き出す

まとめ

Excel標準機能だけでも、
特徴量設計 → モデル化 → UI → ランキング
まで一通り実装できることがわかった

制約があるからこそ、
抽象化・設計思想の重要性がよく見える
良い題材だった

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?