複雑な式を駆使するようなとき、数字を列番号に変換に変換しなければならないケースがある。1を「A」、2を「B」…といった具合に数字からアルファベットを作るには、CHAR関数を使うのが一般的だ。CHAR関数は、引数で指定した文字コードに該当する文字を返す関数。アルファベット「A」の文字コードは65なので、次のようにして変換できる。

図1 CHAR関数は、文字コードを文字に変換する関数。アルファベット「A」の文字コードは65だ
図1 CHAR関数は、文字コードを文字に変換する関数。アルファベット「A」の文字コードは65だ

 ただのアルファベットならこれで十分だが、ワークシートの列番号に変換したいときには問題がある。アルファベットは「Z」までだが、ワークシートの列番号は「Z」の次が「AA」と2文字になるからだ。さらにExcel 2007では「XFD」まで列が拡大された。こうなると、CHAR関数に文字コードを指定する方法では煩雑になる。もっとスマートな方法はないのだろうか。

 ExcelにはADDRESS関数という関数がある。行と列の位置を数字で指定すれば、その位置にあるセルのアドレスを返す関数だ。たとえば「1行目3列目」なら「ADDRESS(1,3)」と指定する。結果は「$C$1」という絶対参照形式の文字列が返る。

図2 ADDRESS関数は数字で指定したセルのアドレスを返す
図2 ADDRESS関数は数字で指定したセルのアドレスを返す

 ADDRESS関数は、3番目の引数を指定することで「$」の付かない相対参照形式のアドレスを返すこともできる。3番目の引数に「2」を指定すると、列は相対参照で行だけが絶対参照になるので「C$1」のようなアドレスを得られる。

図3 ADDRESS関数には他にも引数がある。3番目の引数を指定すると相対参照形式のアドレスを得られる
図3 ADDRESS関数には他にも引数がある。3番目の引数を指定すると相対参照形式のアドレスを得られる

 ここまでできれば、あとは簡単だ。「C$1」のように行番号にだけ「$」が付くのなら、アドレスの「$」から手前が列番号となる。ADDRESS関数の結果から「$」の位置を調べて、その左側を抜き出してやればいい。

図4 ADDRESS関数の結果から、FIND関数で「$」の位置を調べる。その位置より手前が列番号になる
図4 ADDRESS関数の結果から、FIND関数で「$」の位置を調べる。その位置より手前が列番号になる
[画像のクリックで拡大表示]