t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

Excel VBAの列挙型を使ってセルを指定する。

VBAでセルを指定する時、RangeプロパティとCellsプロパティがあるが、Cellsは列に対応する数字が直感的に分からないので、これまでは敬遠してきた。
しかし、この列指定を列挙型に変えたら、劇的にわかりやすくなったという話。

Excelでこんな表を作ったとする。
f:id:t-hom:20150213215648p:plain

たとえばこの表のB2セルを指定するには、Range("B2")とするか、Cells(2,2)とするのが一般的であるが、以下は列挙型を使ってRange("B2")に「やまだ」と入力するサンプルである。

Enum c '列挙型名。なんでも良いが、長いとコーディングが面倒なのでColumnのcとした。
    名前 = 1
    ふりがな
    アドレス
    電話番号
    都道府県
End Enum

Sub Sample()
    Cells(2, c.ふりがな) = "やまだ"
End Sub

列挙型というのはその名の通り、何かを列挙するときに便利な型である。
それぞれの項目には整数型の数値を指定できるが、省略すると前の項目に1を足した値になる。
先頭項目の指定を省略するとゼロになるが、今回はCellsの列番号として使うので1始まりとした。

上の例ではcという名前の列挙型を作っており、c.と入力した時点で入力候補に列名が出てくる。
c.が邪魔な気はするが、定数にしてしまうとバラバラに管理してかつ一つずつ値の代入が必要になってくる。

列挙型なら、間に列が増えたりしてもExcelのヘッダを縦列入れ替え貼り付けしたものをコピーしてくるだけで簡単にメンテできる。

コードに日本語が混じるのを嫌う人もいるが、そこに抵抗が無ければそこそこ使えると思う。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。