エクセル関数で列の番号でなく、列のアルファベットを取得する方法
エクセルで列番号を取得するのはCOLUMUN関数で簡単にできるが、数値じゃなくてアルファベットを取得する方法って分かりませんよね。。。
そこで、ネットでそんな関数がないか調べてみたところ、あるにはあるが結構面倒な処理が多かったので、仕方なく自分で考えてみた。
いい感じにできたと思ったのでブログに残します。
結構スマートな方法ではないかと思います。
セルの列をアルファベット(だけを)取得する関数
まず、汎用性は無いが簡単な方法
=LEFT(ADDRESS(ROW(),COLUMN(),4,1),1)
【解説】 ~セル”A17”に入力した場合~
- ADDRESS関数でセルの行列を取得
ADDRESS(ROW(),COLUMN(),4,1)
→ 結果:A17
- LEFT関数で左から必要なアルファベット(1文字)のみ取得
LEFT(ADDRESS(ROW(),COLUMN(),4,1),1)
→ 結果:A ※”A17”の左から1文字
今回のように列がA~Zなら最後の桁数を1にすればOKですが、列がAA~ZZなら最後の桁数を2にする必要があります。
アルファベットの文字数を決め打ちなので、もし列がZからAAに移動した場合などで対応できない弱さはありますが、移動しない前提ならこれでもOKだと思います。
次に、汎用性が高いが少し面倒な方法
=LEFT(ADDRESS(ROW(),COLUMN(),4,1),LEN(ADDRESS(ROW(),COLUMN(),4,1))-LEN(ROW()))
【解説】 ~セル”BN31”に入力した場合~
- ADDRESS関数でセルの行列を取得
ADDRESS(ROW(),COLUMN(),4,1)
→ 結果:BN31 - 不要な行の数字(31)を削除するために、LEN関数で行の文字数を取得
LEN(ROW())
→ 結果:2 ※ROW()の結果は”31”だから、LENの結果は2文字 - 行列(BN31)の文字数をLEN関数で取得
LEN(ADDRESS(ROW(),COLUMN(),4,1))
→ 結果:4 ※ADDRESSの結果が”BN31”だから、LENの結果は4文字 - LEFT関数で左から必要なアルファベットのみ取得
LEFT(ADDRESS(ROW(),COLUMN(),4,1),LEN(ADDRESS(ROW(),COLUMN(),4,1))-LEN(ROW()))
→ 結果:BN ※”BN31”の左からアルファベットの文字数(行列の文字数-行の文字数)
このように、LENで取得する文字列を行列の文字数に応じて変動するようにしてあげることで、汎用性の高い使い方ができると思います。
なお、EXCEL VBAでも列のアルファベットと簡単に取得する方法ないので、この関数と組み合わせてやると便利だと思います。
参考になれば嬉しいです。
※追記※
もっとスマートなやり方をHikaru Kiyunaさんが教えてくれたので、ご紹介します!
=SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),)
不要な数字をブランクに置き換えることで実現しています。
【解説】 ~セル”BN31”に入力した場合~
- ADDRESS関数でセルの行列を取得
ADDRESS(ROW(),COLUMN(),4,1)
→ 結果:BN31 - 不要な行の数字(31)を削除するために、SUBSTITUTE関数でブランクに置き換え
SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),)
SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),””) ←ブランクを””と明示化してもOK
→ 結果:BN ※”BN31”からROW()の結果である”31″を””に置き換える
実にスマートなやり方ですね。
Hikaru Kiyunaさん、ありがとうございます!
※本記事についてのお問い合わせは、お受けしておりません。
自社サービスの紹介
適性検査「ポテクト」|強み・弱み・性格・仕事力を徹底診断。法人の入社採用テストや社員研修、就活の自己分析まで。無料版あり