Excelで列番号をアルファベットに変換する方法|関数の組み合わせで簡単取得

スポンサーリンク

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関数の詳しい使い方は、それぞれの解説記事もあわせてチェックしてみてください。

タイトルとURLをコピーしました