再びトーナメント表作成 ➈-2 特定名簿からの作成

長らく温めてきたトーナメント作成ツールだが、一部からのリクエスト仕様に対し検討を重ね、汎用化を断念した。この辺りは、私の能力不足に尽きる。

ということで、特定名簿からの作成に特化したものを、少しずつ紹介していく。

まずは標準モジュールの、モジュールレベル変数などから。解説はすべてコメント文を参照されたし。

' 表の列番号をラベル名称で指定するためのEnum。
Public Enum 列名
    enNo = 1
    en名前
    enふりがな
    en性別
    en学校等区分
    en学年
    en所属
    en形出場
    en前回形順位
    en組手出場
    en前回組手順位
    [_eLast]
End Enum

' 形と組手の指定を引数で明示するためのEnum。
Public Enum MatchType
    en形
    en組手
End Enum

' 選手情報を格納するためのコレクション。
Public Persons As Collection
' 選手情報を格納するためのクラスモジュール。
Public p As Person
' 所属が同じ選手間での対戦をなるべく回避するための辞書。
Public PDict As Scripting.Dictionary
' 形と組手で同じ選手と対戦しないための辞書。
Public DDict As Scripting.Dictionary

次に、名簿から選手情報を取得する部分がこちら。同じく標準モジュール。

' 選手の基本情報取り込み。
Sub 名簿データ取得()
    Set Persons = New Collection
    ' トーナメント表に表示するための辞書。
    ' key情報:各選手に付された通し番号。
    ' item情報:選手名と所属名称。
    Set PDict = New Scripting.Dictionary
    Dim i As Long
        For i = 1 To S21_名簿_元データ.Tb.ListRows.Count
            With New Person
                .No = S21_名簿_元データ.Tb.ListRows(i).Range(列名.enNo)
                .名前 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en名前)
                .ふりがな = S21_名簿_元データ.Tb.ListRows(i).Range(列名.enふりがな)
                .性別 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en性別)
                .学校等区分 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en学校等区分)
                .学年 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en学年)
                .所属 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en所属)
                .形出場 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en形出場)
                .前回形順位 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en前回形順位)
                .組手出場 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en組手出場)
                .前回組手順位 = S21_名簿_元データ.Tb.ListRows(i).Range(列名.en前回組手順位)
                
                ' ↓表現は自由に変更可能。
                PDict(.No) = .名前 & "(" & .所属 & ")"
                Persons.Add .Self
            End With
        Next
End Sub

なお、昨日も紹介したシート名がこちら。

シート名を変更されても対応できるよう、オブジェクト名で指定している。
例)
シート名「名簿_元データ」ではなく、「S21_名簿_元データ」で指定。
頭のSは単純に、SheetのSの意。管理しやすいように、並んでほしい順で
21などの番号を振っている。

次いで、名簿データ取得に登場したクラスモジュール「Person」がこちら。

Public No As Variant
Public 名前 As Variant
Public ふりがな As Variant
Public 性別 As Variant
Public 学校等区分 As Variant
Public 学年 As Variant
Public 所属 As Variant
Public 形出場 As Variant
Public 前回形順位 As Variant
Public 組手出場 As Variant
Public 前回組手順位 As Variant

Public Property Get Self() As Person
    Set Self = Me
End Property

これについては、Thomさんのブログからほぼ原形で引用している。
(いつもありがとうございます)。
thom.hateblo.jp

今日はここまで。明日に続きます。

参考まで。