再びトーナメント表作成 ➈-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
今日はここまで。明日に続きます。
参考まで。