Excelで「この列って何列目?」はCOLUMN関数ですぐわかります。でも「列番号をアルファベットに変換したい」となると、専用の関数がないので困りますよね。
実はCOLUMN・ADDRESS・SUBSTITUTEの3つを組み合わせれば、たった1行の数式で列のアルファベットを取得できます。この記事ではコピペで使える数式と、その仕組みをステップごとにわかりやすく解説します。
Excelで列番号をアルファベットに変換する数式
結論から見ていきましょう。コピペですぐに使える数式は次の2パターンです。
パターン1:自分のセルの列を取得する
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),1,"")
数式を入力したセルの列アルファベットを返します。たとえばD列のセルに入力すると「D」、AN列なら「AN」が返ります。
パターン2:列番号を指定して変換する
=SUBSTITUTE(ADDRESS(1,40,4),1,"")
列番号を直接指定するパターンです。上の例では40列目を指定しているので「AN」が返ります。A列=1、B列=2、C列=3…のように左から数えた番号を入れてください。
セル参照で列番号を渡すこともできます。A1セルに列番号が入っている場合は次のようにします。
=SUBSTITUTE(ADDRESS(1,A1,4),1,"")
TIP
行番号は「1」に固定するのがポイントです。理由は後ほど「よくあるミスと対処法」で説明します。
数式の仕組みをステップごとに解説
一見むずかしそうに見えますが、やっていることはシンプルです。3つの関数がそれぞれ1つずつ役割を担当しています。
ステップ1:COLUMN関数で列番号を取得する
COLUMN関数は、セルの列番号を数値で返す関数です。
=COLUMN()
D列のセルで実行すると「4」が返ります。引数を省略すると、数式を入力したセル自身の列番号になりますよ。
ステップ2:ADDRESS関数でセル番地を作る
次にADDRESS関数を使って、列番号からセル番地の文字列を組み立てます。
=ADDRESS(1, 4, 4)
この数式は「1行目・4列目・相対参照」を意味します。結果は文字列「D1」です。
ADDRESS関数の引数は次のとおりです。
| 引数 | 意味 | この数式での値 |
|---|---|---|
| 行番号 | セル番地の行 | 1(固定) |
| 列番号 | セル番地の列 | COLUMN()の結果 |
| 参照の型 | $記号の有無 | 4(相対参照=$なし) |
第3引数を「4」にするのがポイントです。「$D$1」のように$記号が付くと、あとで行番号だけを取り除くのが面倒になります。「4」を指定すれば「D1」のようにシンプルな形で返ってきますよ。
ステップ3:SUBSTITUTE関数で行番号を取り除く
最後にSUBSTITUTE関数で、セル番地から行番号部分を空文字に置換します。
=SUBSTITUTE("D1", 1, "")
「D1」から「1」を取り除いて「D」だけが残る、という仕組みです。
これら3つのステップをまとめると、冒頭の数式になります。
=SUBSTITUTE(ADDRESS(1, COLUMN(), 4), 1, "")
COLUMN()→ADDRESS()→SUBSTITUTE()の順にデータが流れていくイメージですね。
実務で使える応用パターン
基本の数式がわかったところで、実務で役立つ応用パターンを紹介します。
応用1:別のセルの列アルファベットを取得する
特定のセルの列アルファベットを知りたい場合は、COLUMN関数に参照を渡します。
=SUBSTITUTE(ADDRESS(1,COLUMN(G5),4),1,"")
G5セルの列番号(7)をCOLUMN関数が返し、結果は「G」になります。
応用2:連番の列アルファベット一覧を作る
A1セルに「1」、A2に「2」…と列番号を並べておき、B列に次の数式を入れます。
=SUBSTITUTE(ADDRESS(1,A1,4),1,"")
下方向にコピーすれば、列番号に対応するアルファベットの一覧表が完成します。26列目まで入れればA〜Z、27列目以降はAA、AB…と2文字の列名も正しく返ってきますよ。
応用3:見出し行と組み合わせて列名を自動表示する
データの1行目に項目名がある表で、「何列目が何の項目か」を確認したいケースです。
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),1,"") & "列: " & B1
B1セルの上に配置すれば「B列: 売上」のように、列アルファベットと項目名をまとめて表示できます。
使用する3つの関数の役割まとめ
この数式で使う関数の役割を表で整理しておきます。
| 関数 | 役割 | この数式での使い方 |
|---|---|---|
| COLUMN | 列番号を取得 | セルの列を数値で返す |
| ADDRESS | セル番地を文字列で生成 | 行番号1+列番号→「A1」形式の文字列 |
| SUBSTITUTE | 文字列を置換 | セル番地から行番号「1」を除去 |
データの流れは 列番号(数値)→ セル番地(文字列)→ アルファベットのみ(文字列) です。
よくあるミスと対処法
行番号にROW()を使うと誤置換が起きることがある
旧バージョンの数式 =SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),"") には落とし穴があります。
たとえば11行目のA列で実行してみましょう。ADDRESS関数は「A11」を返します。ここでSUBSTITUTEが「11」を空文字に置換すると、結果は「A」で正しく動きます。
しかし、行番号が「1」のケースが問題です。1行目のA列では「A1」が返り、「1」を消すと「A」。これは正しいですね。
では1行目のAA列ではどうでしょうか。ADDRESS関数は「AA1」を返します。「1」を消すと「AA」で正しいです。ただし行番号「10」のA列は要注意です。「A10」から「10」を消すと「A」で、これもたまたま正しく見えます。
実際に問題が起きるパターンは限定的ですが、行番号が変わるたびに動作を確認するのは面倒ですよね。
行番号を「1」に固定しておけば、こうした心配は一切不要です。
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),1,"")
行番号1なら、末尾の「1」を消すだけで確実にアルファベットだけが残りますよ。
#VALUE!エラーが出る場合
COLUMN関数に無効な参照を渡すと#VALUE!エラーになることがあります。引数を省略するか、有効なセル参照を指定しているか確認してみてください。
列番号に0以下を指定した場合
ADDRESS関数の列番号に0以下の値を渡すと#VALUE!エラーになります。列番号は1以上の整数を指定しましょう。
まとめ
Excelで列番号をアルファベットに変換する数式を紹介しました。
| やりたいこと | 数式 |
|---|---|
| 自セルの列を取得 | =SUBSTITUTE(ADDRESS(1,COLUMN(),4),1,"") |
| 列番号を指定して変換 | =SUBSTITUTE(ADDRESS(1,列番号,4),1,"") |
| 別セルの列を取得 | =SUBSTITUTE(ADDRESS(1,COLUMN(セル),4),1,"") |
ポイントは3つの関数の役割分担です。COLUMN関数で列番号を取得し、ADDRESS関数でセル番地の文字列を作り、SUBSTITUTE関数で行番号を除去します。行番号は「1」に固定しておくのが安全ですよ。
COLUMN関数やADDRESS関数の詳しい使い方は、それぞれの解説記事もあわせてチェックしてみてください。
