COLUMN関数を使用すると、セルの数値列を簡単に判別できます。このような数式をセルに入れるだけで、結果はA = 1、B = 2などの値になります。

=COLUMN()

数値ではなくアルファベットの値が必要な場合はどうなりますか?これは、いくつかの異なる方法のいずれかで行うことができます。たとえば、次の式は、最初の26列のAからZに対して非常にうまく機能します。

=CHAR(COLUMN()+64)

これは、文字AからZが文字コード65から90を使用するために機能します。COLUMNが列AからZ(1から26)の値を返す場合、これを64に追加して、これらの列の文字65から90を取得できます。

||||もちろん、Zを超える列の文字指定を知りたい場合、このソリューションは機能しません(ExcelはIVまでの列を使用できます)

この式は、1文字列と2文字列で機能します。

=IF(COLUMN()<27,CHAR(COLUMN()+64),CHAR((COLUMN()/26)+64)& CHAR(MOD(COLUMN(),26)+64))

お分かりのように、1つの列に複数の文字が含まれると、数式はかなり早く長くなります。ただし、COLUMN以外の関数を使用すると、数式を短くすることができます。主にADDRESS関数に依存する次の式について考えてみます。

=LEFT(ADDRESS(1,COLUMN(),4),(COLUMN()>26)+1)

ADDRESS関数は、特定のセルのアドレスを返します。この場合、現在の列の最初の行にあるセルのアドレスを返します。したがって、数式がセルBF27にある場合、BF1を返します。

この数式は、LEFT関数を使用して、アドレスの左端の正しい文字数から行の1を引いた数を返します。

式のさらに短いバージョンは、LEFT関数ではなくSUBSTITUTE関数に依存しています。

=SUBSTITUTE(ADDRESS(ROW(),COLUMN(),4),ROW(),"")

このバージョンでは、ROW関数を使用してアドレスをまとめ、ADDRESS関数の結果からROW値を取り除きます。

もちろん、必要に応じて、マクロベースのソリューションを使用することもできます。次のマクロは、ワークシートの任意の列で機能します:

Function AlphaCol() As String     Dim J As Integer     Dim K As Integer     Dim iDiv As Integer     Dim sTemp As String

Application.Volatile     J = Selection.Column     iDiv = 26 ^ 2     sTemp = ""

While J > 0         K = Int(J / iDiv)

If K > 0 Then sTemp = sTemp & Chr(K + 64)

J = J - (K * iDiv)

iDiv = iDiv / 26     Wend     AlphaCol = sTemp End Function

マクロはユーザー定義関数です。つまり、これを任意のセルに追加するだけで、ワークシートで使用できます。

=AlphaCol()

列指定で構成されるテキスト文字列が返されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3254)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。

link:/ excelribbon-Alphabetic_Column_Designation [Alphabetic ColumnDesignation]