目次
このチュートリアルでは、Excelの列番号を対応するアルファベット文字に変更する方法について説明します。
Excelで複雑な数式を作成する際、特定のセルや数値から列の文字を取得する必要がある場合があります。 これには、組み込み関数またはカスタム関数を使用する2つの方法があります。
列番号をアルファベットに変換する方法(一文字の列)
カラム名がAからZまでの1文字で構成されている場合、この簡単な計算式で求めることができます。
CHAR(64 +) col_number )例えば、10番を列文字に変換する場合は、次のような式になります。
=CHAR(64 + 10)
また、どこかのセルに数値を入力し、計算式の中でそのセルを参照することも可能です。
=CHAR(64 + A2)
この処方の仕組み
CHAR関数は、ASCIIセットの文字コードに基づいた文字を返します。 英語のアルファベットの大文字のASCII値は65(A)〜90(Z)です。 したがって、大文字Aの文字コードを得るには64に1を加え、大文字Bの文字コードを得るには64に2を加え、...という具合になります。
Excelの列番号を文字に変換する方法(任意の列)
もし、Excelのどの列(1文字、2文字、3文字)でも使える汎用性の高い数式をお探しなら、もう少し複雑な構文が必要になります。
substitute(アドレス(1, col_number , 4), "1", "")列文字をA2とすると、数式は次のような形になります。
=substitute(アドレス(1, a2, 4), "1", "")
この処方の仕組み
まず、ADDRESS関数に次のような引数を与えて、目的の列番号のセルアドレスを作成します。
- 1名様 行番号 (行番号はあまり重要ではないので、どれを使ってもよい)。
- A2(列番号を含むセル)に対して 列番号 .
- 4の場合 abs_num 引数を使用して相対参照を返します。
上記のパラメータを指定して、ADDRESS関数を実行すると、結果として「A1」という文字列が返されます。
SUBSTITUTE関数は、テキスト「A1」の中から「1」(またはADDRESS関数内でハードコードした行番号)を探し、それを空文字列("")に置き換えます。
カスタム関数を使用して列番号から列文字を取得する カスタム関数
列の番号をアルファベットに変換する必要がある場合、カスタムユーザー定義関数(UDF)を使用すると、非常に時間を節約することができます。
この関数のコードは非常に平易で分かりやすいものです。
Public Function ColumnLetter(col_num) ColumnLetter = Split(Cells(1, col_num).Address, "$" )(1) End Functionここでは 細胞 プロパティで、1 行目、指定された列番号のセルを参照し 住所 プロパティで、そのセルへの絶対参照を含む文字列($A$1など)を返します。 次に、Split関数で、返された文字列を$記号を区切りとして個々の要素に分割し、要素(1)である列文字を返しています。
このコードをVBAエディタに貼り付けると、新しい コラムレター 詳しい説明は、「ExcelでVBAコードを挿入する方法」をご覧ください。
エンドユーザーの視点から見ると、この関数の構文はこのように単純である。
ColumnLetter(col_num)どこ col_num は、文字に変換したい列番号です。
実際の計算式は次のようになります。
=ColumnLetter(A2)
そして、前の例で説明したExcelのネイティブ関数と全く同じ結果を返します。
特定のセルの列文字を取得する方法
特定のセルの列文字を特定するには、COLUMN関数で列番号を取得し、その番号をADDRESS関数に渡します。 完全な数式は次のような形になります。
substitute(アドレス(1), 列( セルアドレス ), 4), "1", "")例として、セルC5の列文字を検索してみましょう。
=substitute(address(1, column(c5), 4), "1", "")
明らかに、結果は「C」です :)
現在のセルの列文字を取得する方法
現在のセルの文字を計算するには、上記の例とほとんど同じ数式を使用します。 唯一の違いは、数式があるセルを参照するために、COLUMN()関数を空の引数で使用する点です。
=substitute(アドレス(1, column(), 4), "1", "")
列番号からダイナミックレンジリファレンスを作成する方法
これまでの例から、新しい考察の題材を得ることができたと思いますが、実際の応用についてはいかがでしょうか。
この例では、「列番号から文字へ」の数式を実際のタスクの解決に使用する方法を紹介します。 特に、特定の列からその番号に基づいて値を引き出す動的なXLOOKUP数式を作成する方法を紹介します。
以下のサンプル表から、あるプロジェクト(H2)と週(H3)の利益数値を出したいとします。
そのためには、XLOOKUPに値を返す範囲を指定する必要があります。 列番号に対応する週番号しかないので、まずその番号を列文字に変換してから、範囲参照を構築するつもりです。
ここでは便宜上、全体の流れを3つのステップに分解して説明します。
- 列番号を文字に変換する
H3の列番号で、すでにおなじみの数式を使って、アルファベットに変更します。
=substitute(アドレス(1, h3, 4), "1", "")
ヒント:データセットの番号と列番号が一致しない場合、必要な修正を行う。 例えば、1週目のデータがB列、2週目のデータがC列、...といった場合、H3+1を使って正しい列番号を取得する。
- 範囲参照を表す文字列を構成する
文字列形式の範囲参照を作成するには、上記の数式が返す列文字と最初と最後の行番号を連結します。 今回の場合、データセルは3行目から8行目にあるので、この数式を使用します。
=SUBSTITUTE(ADDRESS(1, H3, 4), "1", "") & "3:" & SUBSTITUTE(ADDRESS(1, H3, 4), "1", "") & "8"
H3が "3 "を含み、"C "に変換されることを考えると、この式は次のように変形する。
="C"&"3:"&"C"&"8"
そして、文字列C3:C8を生成する。
- ダイナミックレンジのリファレンスを作る
テキスト文字列をExcelが理解できる有効な参照に変換するには、上記の数式をINDIRECT関数でネストし、XLOOKUPの第3引数に渡します。
=XLOOKUP(H2, E3:E8, INDIRECT(H4), "見つかりませんでした")
返送範囲の文字列を含む余分なセルを取り除くには、SUBSTITUTE ADDRESS式をINDIRECT関数自体の中に配置すればよいのです。
=XLOOKUP(H2, E3:E8, INDIRECT(SUBSTITUTE(ADDRESS(1, H3, 4), "1", "") & "3:" & SUBSTITUTE(ADDRESS(1, H3, 4), "1", "") & "8"), "Not found")
私たちのカスタムColumnLetter関数を使用すると、よりコンパクトでエレガントなソリューションを得ることができます。
=XLOOKUP(H2, E3:E8, INDIRECT(ColumnLetter(H3) & "3:" & ColumnLetter(H3) & "8"), "見つかりませんでした")
以上、エクセルで数字から列文字を探す方法でした。 読んでいただきありがとうございました!来週のブログでお会いできるのを楽しみにしています。
練習用ワークブック(ダウンロード
Excelの列番号から文字への変換 - 例 (.xlsm ファイル)