【Access】データベースを使って項目に順番をつける

Access
スポンサーリンク

AceessVBAを使ってデータに順番をつける

競馬データを扱っていると、スクレイピングで取った数値データをある項目で並べ替えたりすることがデータ分析を行う上で、必須になってくる。

初めから用意しておけば良いとは思うが、その項目を実際に使うまでは、順位付けが必要かどうか?は判断できない。

VBAで数値項目を昇順(降順)に並べて順位付けする雛形モジュール作成

この記事を読むと、VBAでテーブルのある数値項目の順位をつけるモジュール(VBA)が作成できる。これを更新クエリーだけでやると、少なくとも5つほど作成しなければいけない。

ので、Key項目で並べ替えて、SEQ.を付けるといった場合に重宝する雛形モジュールになる。

競馬データを例に取るなら複勝倍率順(馬連順、馬単順)に並べ替えて順番をデータ化

  • 複勝倍率順に並べ替えて、複勝人気順を作成する
  • 馬連倍率順(馬単倍率順など)
  • 前走上り順   〃  、前走上り順  〃

今回のサンプルは前走上り順データを作成するモジュール

これは今日データ分析するのに作成したばかりの出来立てホヤホヤなので、ここで晒しておく!内容に不備がある場合は、ご自身で修正してお使い下さいませ。

なぜExcelでなく、Accessなのか?というと・・・

  • 大量データを扱える
  • 並べ替えが楽

参考 AccessVBA:前走上り順データを作成するモジュール

Function RAgariRenban()

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim strSQL As String
    Dim BL_DATE As Date, BL_ZYOMEI As String, BL_R As Integer
    Dim BL_AGARI As Double, BL_SEQ As Integer
    Dim i As Long, n As Long

    strSQL = "SELECT 開催日, 場名, R, 推定上り, 推定上り順" & " "
    strSQL = strSQL & "FROM WK_DT" & " "
    strSQL = strSQL & "WHERE 推定上り > 0" & " "
    strSQL = strSQL & "ORDER BY 開催日, 場名, R, 推定上り"
    strSQL = strSQL & ";"

    'カレントデータベースを変数に代入する
    Set db = CurrentDb
    
    'クエリを実行してレコードセットを開く
    Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)
        
    RAgariRenban = False
    If rst.RecordCount <= 0 Then Exit Function

    i = 1

        Do
            rst.Edit
            If i = 1 Then
                BL_DATE = rst!開催日
                BL_ZYOMEI = rst!場名
                BL_R = rst!R
                BL_AGARI = rst!推定上り
                BL_SEQ = 1
                n = 0
            End If
'''ブレイクkey
            If BL_DATE = rst!開催日 And BL_ZYOMEI = rst!場名 And BL_R = rst!R Then
                If BL_AGARI = rst!推定上り Then
'''ここまで一緒だと「推定上り順」は重複する
                    rst!推定上り順 = BL_SEQ
                    If i > 1 Then
                        n = n + 1
                    End If
                Else
                    BL_SEQ = BL_SEQ + 1 + n
                    rst!推定上り順 = BL_SEQ
                    BL_AGARI = rst!推定上り
                    n = 0
                End If
            Else
                BL_DATE = rst!開催日
                BL_ZYOMEI = rst!場名
                BL_R = rst!R
                BL_AGARI = rst!推定上り
                BL_SEQ = 1
                n = 0
                rst!推定上り順 = BL_SEQ
            End If
    
            rst.Update
            
            i = i + 1
            rst.MoveNext
        Loop Until rst.EOF = True
    
    rst.Close
    RAgariRenban = True
End Function

※前回使用した複勝順作成を再利用してモジュールを作成。

一つ一つの命令の解説は、このブログではしていないので、ご自身でググってみてね。

参考 Accessマクロ:前走上り順データを更新するマクロサンプル抜粋

「前走上り順」項目をテーブルに追加して、その順番を更新するAccessマクロ抜粋!

※サブマクロを書き換えれば、データ更新はこれを流用すれば手順での更新ミスが激減する。

Accessマクロを使ったサブシステム量産方法:2022.3.10追記

データ分析してみた結果は・・・?

特別に何かプラスが出るようなことは発見出来なかったのである。まだコーナー順を調べた方が何かありそうな雰囲気はあるな~と感じた昨日から今日の2日間であった。

前走上り①番手の分析データのサンプル

前走上り順①サンプルデータ:Accessのテーブル

編集後記

なんだかんだと思いついては、データ分析してみるけど、コレ!といった使えるモノはなかなか見つからないね~( ̄▽ ̄)。。。まぁ簡単に見つかるなら、みんな億万長者になってしまうもんねぇw

それでも、気になることは自分で即座に分析したい衝動に襲われるので、仕方ないかな~と思っている。結局アナログ予想が一番当たるから「競馬は面白い!」のかも知れない♡

また気が向いたらデータ分析の一部をアップするかも知れないので、応援してね。

それでは、またね~😎

タイトルとURLをコピーしました