VBA配列とEnumステートメントの活用1
はじめに
私はEnumステートメントが大好きです!なぜならコードの可読性が上がるので便利だからです。
Enumステートメントを使うと定数をまとめて定義できます。これが配列と相性がいいので、よく一緒に使います。
今回はその一例を紹介します。
今回用意したデータ
e-Statで公開されている2020年の国税調査結果の「人口速報集計(男女別人口及び世帯総数)」を使用します。
ダウンロードしたファイルを確認します。
このままでは、ちょっとVBAの配列が使いにくいですね・・・。なので手を加えて以下のように加工しました。
ちなみに、このブックのシートは、もともとあった「a01」と、今回転記用に使用する「都道府県別総人口」を追加した2シートです。
今回やりたい処理
では、このデータを使用してEnumステートメントと配列を活用して実施する内容を決めます。
まずはざっくり、こんな感じで決めてみました。
「a01」シートから全国と各都道府県の総人口情報を収集して、必要な項目のみ「都道府県別総人口」シートへ転記する
このままでは抽象的なので、具体的に条件を決めていきます。
地域識別コードを調べてみると、総数の情報は「地域識別コード:a」のようですね。よって「地域識別コードが「a」の項目を転記対象とする」という条件ができました。
また、転記する項目は以下7項目としましょう。
- 地域識別コード
- 都道府県
- 人口/総数
- 人口/男
- 人口/女
- 人口密度
- 世帯数
まとめると以下の処理になります。
「a01」シートの「地域識別コードが「a」の項目かつ、上記7項目のみ「都道府県別総人口」シートへ転記する
さて、やりたいことが決まったところで、 Enumステートメントの定義内容を決めます。
Enumステートメントの定義内容
まずはEnumステートメントで定義したいグループ名を決めます。
今回は「「a01」シート1行目の項目名」を対象にします。
よって、Enumステートメントのグループ名は「a01シート項目」とします。
では、グループの各要素名を決めましょう。
「a01」シート1行目の項目名は以下の16個です。
- 地域識別コード
- 都道府県
- 地域名
- 人口/総数
- 人口/男
- 人口/女
- 2015年(平成27年)の人口(組替)
- 5年間の人口増減数
- 5年間の人口増減率
- 人口性比
- 面積(参考)
- 人口密度
- 世帯数
- 2015年(平成27年)の世帯数(組替)
- 5年間の世帯増減数
- 5年間の世帯増減率
さて、ここで注意点があります。
VBAでは変数名や、Enumステートメントのグループ名や要素名などには、命名ルールがあります。
Office TANAKAさんのサイトからVBAの変数の命名の注意点を引用します。 http://officetanaka.net/excel/vba/variable/06.htm
- 変数名には文字(日本語を含む)のほか、アンダーバー(_)だけを使えて、そのほかの記号やスペースは使えない
- 変数名の先頭が数字やアンダーバー(_)ではいけない
- 同じ適用範囲で同じ名前は使えない
- 変数名の長さは半角で255文字まで
Enumステートメントのグループ要素も同じ命名ルールです。よって、少し工夫して今回は以下のEnumステートメントのグループの要素名で定義します。
- 地域識別コード
- 都道府県
- 地域名
- 人口_総数
- 人口_男
- 人口_女
- 人口_2015年
- 過去5年間の人口増減数
- 過去5年間の人口増減率
- 人口性比
- 面積_参考
- 人口密度
- 世帯数
- 世帯数_2015年
- 過去5年間の世帯増減数
- 過去5年間の世帯増減率
Enumステートメントの定義内容が決まったところでコードを書きたいのですが、長くなってしまったので一旦ここで区切ります。