どこにも需要がない「今が何回戦なのかを返すFunction」を考えた

トーナメント戦を扱うと、1回戦、2回戦、3回戦と進んでいくのは分かりやすいのだが、どこかで「準々決勝」「準決勝」「決勝」と表記しなければならない。

1回戦から順番に数えると6回戦なんだけど、一般的な呼称は「準決勝」のような場合。

そこで、「単純に数えて今何回戦なのか」と「出場チーム数」を渡してやれば、「○回戦」あるいは「準々決勝」「準決勝」「決勝」のような表記を返してくれるFunction「getRoundName」を考えてみた。

Private Function getRoundName(intRound As Integer, schools As Integer) As String
Dim maxRound    As Integer
Dim rtn         As String

    maxRound = getMaxRound(schools)
    
    Select Case intRound
    Case maxRound
        rtn = "決勝"
    Case maxRound - 1
        rtn = "準決勝"
    Case maxRound - 2
        rtn = "準々決勝"
    Case Else
        rtn = intRound & "回戦"
    End Select
    
    getRoundName = rtn
End Function

'決勝なども含めて「最大何回戦相当まであるか」を取得して返す
Private Function getMaxRound(schools As Integer) As Integer
Dim i       As Integer
Dim j       As Integer
    
    i = 1
    Do While i < schools
        i = i * 2
        j = j + 1
    Loop
    
    getMaxRound = j + 1
End Function

下記のような感じで使用する。

Sub test()
Dim schools As Integer
    
    schools = 49
    
    MsgBox getRoundName(6, schools)
End Sub

で、実際にはVBAで処理している訳ではないのだけれど、Excelで手軽に確認できるからVBAでとりあえず作ってみたという。

何しろ出先なので……。 ← 暇だったらしい