【ExcelVBA小ネタ】ヘッダ行をEnum化

Excelの巨大な表を相手にVBAを組む羽目になったときのTipsを紹介します。

Enumを使う

こんな巨大な表があったとします。

巨大な表の例。列数が300列以上あります。

ヘッダ部分が日本語です。漢字ひらがな数字英字機種依存文字たくさん混じっています。

この表に対して、罫線を引いたり、集計したり、なんやかんやのVBA操作をしなさいというようなVBAを作れと言われたら、ヘッダ部分は手っ取り早く、Enumにしてしまうとよいです。

どうやってEnumにするかというと、

先頭のヘッダ行の一番左のセルをアクティブ

先頭のセルをアクティブにしたところ。

Ctrl+Shift+→(右矢印)でヘッダ行全選択

Ctrl+Shift+→(右矢印)でヘッダ行全選択したところ。

Ctrl+Cでコピー→Ctrl+Nで新規ブック生成→セルA1で右クリック→形式を選択して貼り付け→値、行/列の入れ替えにチェック→OK

形式を選択して貼り付け→値、行/列の入れ替えにチェック→OK

これをもう一度選択してコピーして、今度はVBEに貼り付けます。

VBEに貼り付けたところ。

あとは、Enumにしていく作業になります。

Enum化にあたっての注意点

Enumにするにあたって、気を付けることは、

  • 先頭文字が数字は不可
  • かっこはつかえない
  • 重複する文字列は不可

などなど。ほかにもあるかもしれません。

全部知らなくてもいいです。もしだめならだめで、コンパイラがエラーとして教えてくれるので、エラーになったら直していけばいいです。

最初に名前をつけます。Enumと書いた後、半角スペースを空けて、名前を書きます。私はいつもめんどくさく、「e」という名前にしてしまうのですが、センスがないし、他にもEnumを使うならもっとちゃんとした名前にすべきです(と、自分に言い聞かせている)。
先頭項目に行番号を設定します。この行番号は最初の項目だけに設定すれば、あとは自動で設定されるのですが、もともとの表がセル結合等で空白があるなら、ところどころ手修正が必要になります(適切な行番号をその項目に入れる必要がある。だから私はセル結合大嫌いです。)

Enumの最後にはEnd Enumをつけます。

End Enumを付け加えたところ。赤くなっているところはエラーです。この場合はかっこがついているのがエラーになっていますね。置換等で一気にかっこをとってしまってください。

加工が終わるとこんな感じです。

加工後。先頭部分。

最後にTheEndをつけるとよい

これはTwitterから得た知見なんですが、最後にTheEndをつけ、値は最終項目と同じにするとよいです。

@excelvba_diaryさんのつぶやき。
TheEndをつけたところ。

こうすると何がよいかというと、のちに変更が発生したときに、Enumだけ修正すればよく、手続き本体の修正は最小限にとどめられるということです。

私いつもここは「EndCol」とかにしていたんですよ。最後の列番号だから。

でも@excelvba_diaryさんのTheEndとする方がセンスがよいと思いました。

「利用するケースは少ない」と呟かれていますが、場合によってはビシバシ使うと思います。複数のファイルを開いてマージしたり、CSVに吐き出したりとか。私はテスト結果CSVをビジュアルに見やすいExcel表に加工するという工程でよく使いました。

手続き部での使用例

実際のコーディング例。e.とタイプした後で自動メンバー表示がきいて候補を示してくれています。

Enum化すると何が便利かというと、列番号を意識せずにコーディングできるという点です。

おまけ:セル結合しているヘッダ行の例

セル結合しているヘッダの例です。このヘッダはセルE7からセルJ7までセル結合していまして、これをコピーして、値を行列入れ替えて貼り付けると
こんな風に空白セルができてしまいます。これをそのままEnum化すると
こんな風に空白行ができてしまいますので、空白行は削除してください。空白の後の行は正しい列番号を設定してください。この図だと配偶者の有無が11だったので11と入れています(11と入れないと上からの順番で6になってしまうのです)。・・・とてもめんどうですね!だからセル結合は撲滅したいです。

以上、何かのお役に立てば幸いです。

ここまでお読みくださりありがとうございました。