複雑な式を駆使するようなとき、数字を列番号に変換に変換しなければならないケースがある。1を「A」、2を「B」…といった具合に数字からアルファベットを作るには、CHAR関数を使うのが一般的だ。CHAR関数は、引数で指定した文字コードに該当する文字を返す関数。アルファベット「A」の文字コードは65なので、次のようにして変換できる。
ただのアルファベットならこれで十分だが、ワークシートの列番号に変換したいときには問題がある。アルファベットは「Z」までだが、ワークシートの列番号は「Z」の次が「AA」と2文字になるからだ。さらにExcel 2007では「XFD」まで列が拡大された。こうなると、CHAR関数に文字コードを指定する方法では煩雑になる。もっとスマートな方法はないのだろうか。
ExcelにはADDRESS関数という関数がある。行と列の位置を数字で指定すれば、その位置にあるセルのアドレスを返す関数だ。たとえば「1行目3列目」なら「ADDRESS(1,3)」と指定する。結果は「$C$1」という絶対参照形式の文字列が返る。
ADDRESS関数は、3番目の引数を指定することで「$」の付かない相対参照形式のアドレスを返すこともできる。3番目の引数に「2」を指定すると、列は相対参照で行だけが絶対参照になるので「C$1」のようなアドレスを得られる。
ここまでできれば、あとは簡単だ。「C$1」のように行番号にだけ「$」が付くのなら、アドレスの「$」から手前が列番号となる。ADDRESS関数の結果から「$」の位置を調べて、その左側を抜き出してやればいい。