[Tips] 馬番を枠番に変換する

Posted on :| コメント (0) | トラックバック (0)

「馬番を枠番に変換するには?」
「うまく変換できないので、枠番情報を含めて欲しい」

 たまにこういう声を聞きます。しかし、吉田が示すコードを見れば「え? こんなに単純なの?」と思わず声を上げることでしょう。 プログラミングはシンプルに設計し、実装することが肝心です。

■馬番から枠番を取得するコード(VB6/VBA)

Public Function GetWaku(uno As Long, tou As Long) As Long
Dim Wak As Long

    Select Case tou
        Case 1 To 8
            Wak = uno
        Case 9
            Wak = CLng(Mid$("123456788", uno, 1))
        Case 10
            Wak = CLng(Mid$("1234567788", uno, 1))
        Case 11
            Wak = CLng(Mid$("12345667788", uno, 1))
        Case 12
            Wak = CLng(Mid$("123455667788", uno, 1))
        Case 13
            Wak = CLng(Mid$("1234455667788", uno, 1))
        Case 14
            Wak = CLng(Mid$("12334455667788", uno, 1))
        Case 15
            Wak = CLng(Mid$("122334455667788", uno, 1))
        Case 16
            Wak = CLng(Mid$("1122334455667788", uno, 1))
        Case 17
            Wak = CLng(Mid$("11223344556677888", uno, 1))
        Case 18
            Wak = CLng(Mid$("112233445566777888", uno, 1))
    End Select
   
   GetWaku = Wak

End Function

■プログラムの解説

 コードのポイントは2つあります。

  • 枠番は頭数により決まる
  • 頭数ごとの枠番のパターン化をいかに簡略化するか?

 頭数ごとの枠番のパターンですが、これは頭数ごとに場合分けをして、パターンを定義する方法が簡単です。上記のコードだと、 Select〓Case文を使って頭数ごとに分岐処理しています。
 枠番のパターンですが、これは文字列として定義しています。この時のポイントは馬番と枠番を対比させた文字列を定義すると言うことです。

例: 15頭立ての場合

馬番1番 ……枠番 1
馬番2番 ……枠番 2
馬番3番 ……枠番 2
馬番4番 ……枠番 3
……
馬番15番……枠番 8

これをひとつの文字列で表すと "122334455667788" となります。あとは先頭を馬番1番として、 知りたい馬番と同じ位置にある文字列の数字を読み取るだけです。この文字列の読み取りにはmid$を使います。
 

トラックバック

このエントリーのトラックバックURL:

コメント

コメントフォームに記入し投稿してください





Search
最近の記事
カテゴリー
過去の記事
Comments
TrackBacks
Feed
Powered by