読者です 読者をやめる 読者になる 読者になる

名簿作りマクロ(3)

名簿作りマクロの組立

次のような手順で組み立てる。

  1. 【手順1】ユーザ定義型・列挙型の宣言
  2. 【手順2】定数・変数の宣言
  3. 【手順3】転記マクロの組立

このような手順で進めていきます。

ユーザ定義型・列挙型の宣言

コードの可読性を上げるために、列挙型を駆使する。

リスト1-1 ユーザ定義型
Public Type Racer
  rcName As String
  rcPhonetic As String
  belongsTo As String
  graduateTerm As Integer
  rcGrade As String
  rcClass As String
  rcStyle As String
  isEliminated As Boolean
End Type

選手データを格納するための変数の束。

ワークシートとの対応は、

f:id:akashi_keirin:20170415090500j:plain

画像の通り。

リスト1-2 列挙型orgCol
Public Enum orgCol
  rcName = 1
  rcPhonetic
  belongsTo
  graduateTerm
  rcGrade
  rcClass
  rcStyle
  isEliminated
End Enum

転記元ワークシート各列の名称を定義している。

ワークシートとの対応は、

f:id:akashi_keirin:20170415090506j:plain

画像の通り。

リスト1-3 列挙型styleCol
Public Enum styleCol
  prefNum = 1
  styleNum
  rcPhonetic
  rcStyle
  rcName
  graduateTerm
  rcGrade
  rcClass
  belongsTo
End Enum

転記先の「戦法別」ワークシート各列の名称を定義している。

ワークシートとの対応は、

f:id:akashi_keirin:20170415090512j:plain

画像の通り。

リスト1-4 列挙型prefCol
Public Enum styleCol
  prefNum = 1
  styleNum
  rcPhonetic
  rcStyle
  rcName
  graduateTerm
  rcGrade
  rcClass
  belongsTo
End Enum

転記先の「都道府県別」ワークシート各列の名称を定義している。

ワークシートとの対応は、

f:id:akashi_keirin:20170415090521j:plain

画像の通り。

同じ内容の列を、同じ識別子で呼び出せるようにしているので、書きやすく、読みやすくなっていると思う。

定数・変数の宣言

リスト2-1 定数の宣言
Public Const PROCESS_STYLE As Integer = 1    '……(1)
Public Const PROCESS_PREF As Integer = 2
Public Const ORG_START_ROW As Integer = 2    '……(2)
Public Const STYLE_START_ROW As Integer = 3
Public Const PREF_START_ROW As Integer = 3

(1)からの2行は、「戦法別」シートへの転記と「都道府県別」シートへの転記を切り替えるために渡す引数として使う。

(2)からの3行は、転記元の「選手データ」シート、「戦法別」シート、「都道府県別」シートそれぞれのデータ開始行を指定するためのもの。

後でシートに変更が加わった場合に、極力宣言セクションだけの変更にとどめるためにこうした。うまいやり方なのかどうかは分かりません。

リスト2-2 変数の宣言
Dim gblRacer As GambleRacer    '……(1)
Dim cdGetter As CodeGetter

Dim racerData As Racer    '……(2)

Dim orgSh As Worksheet    '……(3)
Dim styleSh As Worksheet
Dim prefSh As Worksheet

(1)からの2行は、それぞれGambleRacerクラス、CodeGetterクラスのインスタンス用の変数。

GambleRacerクラスについては、コチラ、CodeGetterクラスについてはコチラをご覧ください。

(2)はリスト1-1で定義したRacer型の変数。

(3)からの3行は、転記元の「選手データ」シート、転記先の「戦法別」、「都道府県別」シートそれぞれを格納する変数。多くの細かい処理をメインのコードから切り出した関係で、モジュールレベルでの宣言にした。その都度ワークシートを引数として持たせるのもメンドクサイので。これまた賢いやり方なのかどうかは分からん。

次回予告

思いのほか長くなってしまった。ここまでが下ごしらえ。クラスを作ったり、列挙型を作ったりしたことで、ほとんど思いつくままにコードが書けるようになったと思う。

ホントは今回で終わらせたかったんだけど、既にかなり長くなってしまったので、次こそは完成まで持って行きます。

@akashi_keirin on Twitter