2014年12月3日水曜日

Excel列名変換問題をExcel VBAでやってみた

【まえがき】

という記事が面白かったので、Excel VBAでも列名変換のコードを作ってみました。

【実装したコード】


関数名が、記号的で正直よくない命名の仕方をしているのですが、自分自身わりと各所で多用するため、関数名が長いとコードが煩雑になるので、関数名を短くしています。(Letter to Number → L2N, Number to Letter →N2L)。

【注意したこと】

Excel 2007を境に、最大列数が異なっています。
  •  Excel 2003以前 : 256列
  •  Excel 2007以後 : 65536列
OfficeのVer.に関わらず動作するようにしたかったため、Ver.によって入力値のエラーを出すようにしています(※)。自前で実装する場合には、Ver.のチェック(条件分岐)が必要になるのですが、上記コードの場合、列数が使用中のExcelのVerに対して範囲外の場合には、Excel側でエラーを出してくれます。

※ 巷に溢れるサンプルコードの中には、Excel のVerによる違いを考慮されてないものが見受けられるので、個人的には注意が必要かなと思います。

条件分岐を仕込まなくても、どこかではエラーがでるのですが、変換部分でスルーされると、エラー発生時に、エラーの原因を特定するのに手間取るので、変換時にチェックしたいと考えこのような感じにしています。

【余談】

自分の場合、列名と列番号は以下のような感じで使い分けています。

列名を使うとき

  • Range("A1") でセルを操作するとき
    • 個人的に、Cells(x,y)より感覚的に分かり易いので好んで使っています

列番号(数値)を使うとき

  • Forループで特定範囲の列を順に処理したいとき
  • AutoFilterの列指定

【参考資料】