どこにも需要がない「今が何回戦なのかを返す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でとりあえず作ってみたという。
何しろ出先なので……。 ← 暇だったらしい