Excelで現在の列名を取得する方法は?


30

Excelのセルの現在の行番号と現在の列名を取得する関数は何ですか?


1
関数LINを見つけましたCOLが、問題はそれらが数値を返すことであり、それに列文字が必要INDIRECTです。
ジェイダーディアス

2
その場合、OFFSET関数をINDIRECT数式と組み合わせて、または数式の代わりに使用できます。ただし、文字列を使用する場合は、回答も更新しました。
ブレークスルー

ところで、INDIRECTは揮発性関数なので、控えめに使用してください。位置の計算に必要な参照を基にしている場合、ここではOFFSETの方が良い選択のように聞こえます。
AdamV

回答:


33

これを行うには、ROWおよびCOLUMN関数を使用できます。これらの数式の引数を省略すると、現在のセルが使用されます。これらはOFFSET関数、または数値として行と列の両方を指定できる他の関数で直接使用できます。

たとえば=ROW()、セルD8に入力した場合、返される値は8です。=COLUMN()同じセルに入力した場合、返される値は4です。

列の文字が必要な場合は、CHAR関数を使用できます。列を表すために文字を使用することはお勧めしません。2文字の列名(数字を使用する方がとにかく論理的である場合)に渡すときに注意が必要になるためです。

それでも、列の文字を取得する必要がある場合は、列番号に64を追加するだけです(64は1文字少ないA)ので、前の例では、セルの値をに設定すると=CHAR(COLUMN()+64)、返される値はD。セルの値をセルの場所そのものにしたい場合、完全な数式はになります=CHAR(COLUMN()+64) & ROW()


参考までに、ASCIIテーブルから64を得ました。CODE数式を使用することもできるため、これを使用して更新される数式はになります=CHAR(COLUMN() + CODE("A") - 1)。の最小値COLUMNは常に1 であるため、1を減算する必要があり、式全体の最小戻り値はになりますB

ただし、これは2文字の列では機能しません。その場合、2文字の列を適切に解析するには次の式が必要です。

=IF(COLUMN()>26,IF(RIGHT(CHAR(IF(MOD(COLUMN()-1,26)=0,1,MOD(COLUMN()-1,26))+64),1)="Y",CHAR(INT((COLUMN()-1)/26)+64) & "Z",CHAR(INT((COLUMN()-1)/26)+64) & CHAR(IF(MOD(COLUMN(),26)=0,1,MOD(COLUMN(),26))+64)),CHAR(COLUMN()+64))&ROW()

それを行う簡単な方法があるかどうかはわかりませんが、セルA1からZZ99問題なく機能することは知っています。ただし、これは、文字ベースの列識別子の使用を避け、純粋な数値ベースの式に固執する(たとえば、文字の代わりに列番号を使用するOFFSET)のが最善である理由を示しています。


最初の26列でのみ機能します。しかし、それで十分です。
Jader Dias

1
@Jader DiasですOFFSETので、代わりに使用することをお勧めします。これにより、列を数値として指定できます。とにかく、2文字の列で動作するように拡張するための数式で回答を更新しました。
ブレークスルー

2
スコットの答えがはるかに優れているのに、なぜ彼がそれを説明しなかったことを除けば、この答えがなぜこれほど多くの票を得たのか分かりません。複雑な式は必要ありません。なぜ/どのように機能するかを説明するコメントを追加しました。
ゲルハルトパウエル

これは、AAなどに移動してから機能しなくなるまで機能します。
クリスタン14

@krystanhonourその場合、私の答えからの最後の式...使うHowever, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
画期的

34

次の機能を試してください。

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

説明:ADDRESS(row_num, column_num, [abs_num])[abs_num] = 4=相対アドレス。これは、戻り値に「$」がないことを意味します。列「AB」の場合、ADDRESS「AB1」が返されます。代替は「1」を削除します。



2

これを任意のセルに入力します。

スペイン語:

=SI(ENTERO((COLUMNA()-1)/26)=0;"";CAR((ENTERO(COLUMNA()-1)/26)+64))&CAR(COLUMNA()-(ENTERO((COLUMNA()-1)/26)*26)+64)

英語

=IF(INT((COLUMN()-1)/26)=0,"",CHAR((INT(COLUMN()-1)/26)+64))&CHAR(COLUMN()-(INT((COLUMN()-1)/26)*26)+64)

column()を行番号で置き換えることができます。


2

列名を取得するには、次の式を使用しました。

特定のセルの場合:

=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")

現在のセルの場合:

=SUBSTITUTE(CELL("address"),"$" & ROW(),"")

このバリエーションを試してください。3文字の列で機能し、フロントエンドに「$」を残しません。

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

2

少し手動ですが、VBAは少なく、より簡単な式:

  • Excelの行(セルA1など)に列番号を入力します =column()
  • 下の行に入力します =Address(1,A1)
  • これは結果を提供します $A$1

値がコピーされたら、検索して$1空白で置き換えます。


2

これも同様に機能します

=MID(CELL("address"),2,FIND("$",CELL("address"),2)-2)

これに説明を追加できますか。
ChrisF

1

別の可能な方法は、次のようなものを使用することです。

=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())

ここcolidにいう名前番号1を含む第一のカラムnに対応する:範囲ブック複数の行を有する2つの隣接する列を含む内の他の場所に作成しますCOLUMN()- ZZ、又はしかし、多くの列参照でき番号、文字Aを含む第二の収容したい。ROW()細かいことは行番号を返すことであるとして残されています。

したがって、上記の文字列を 'MySheet2'のセルA1にコピーすると=MySheet1!A1、として評価され、の対応するセルで見つかった値を返しますMySheet1

これにより、たとえば、MySheet1作業領域として使用したり、新しいデータを削除および再挿入したりできますがMySheet2、それらのコンテンツを参照する書式設定や計算は、ターゲットのタブ付きワークシートの新しいデータセットで引き続き正常に機能します。


1

Excelバージョンを洗練するためのソリューション:

  • 特定のセルの場合:
=PODSTAW(PODSTAW(KOMÓRKA("adres";B1);"$" & WIERSZ();""); "$"; "")
  • 現在のセルの場合:
=PODSTAW(PODSTAW(KOMÓRKA("adres");"$" & WIERSZ();""); "$"; "")

0

これは、VBA、ユーザー定義の数式、ソリューションです。1、2、および3文字の列で動作します。

コードモジュールに以下を入力します。

Function COLUMNLETTER(Optional rng As Range) As String
    'Returns the Column Letter of the top left cell in rng.

    If rng Is Nothing Then Set rng = Application.Caller
    COLUMNLETTER = Left(rng.Address(0, 0), IIf(rng.Column > 26, IIf(rng.Column > 702, 3, 2), 1))

End Function

任意のセルの= COLUMNLETTER()は、セルの列文字を返します。
任意のセルの= COLUMNLETTER(B3)はBを返します。

このユーザー定義関数は、INDIRECT関数内で一般的な数式を作成するときに最適に機能します。


0
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)

アドレス式は、列と行の名前を返すことで機能します。返される形式は常に$(Column Letters)$(Row Numbers)- $AA$2または$XAA$243556

$が常に最初の文字で発生することがわかっている場合は、最初のmid数式を使用して、最初の$記号(つまり、2番目の文字)の後に文字を引き始めることができます。

次に、次の$記号を見つけ(2つしかないことを知っているように)、1番目と2番目のドル記号の間にいくつの文字があるかを知ります。残りは単純な減算です。


0

列見出し(文字)を見つける方法は次のとおりです。

=RIGHT(LEFT(ADDRESS(1,COLUMN()),LEN(ADDRESS(1,COLUMN()))-2),LEN(ADDRESS(1,COLUMN()))-3)


0

次の式は、どこに配置しても機能します(列名が返されます)。

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

-1

これを試して:

= IF(COLUMN()> 26、CHAR(COLUMN()/ 26 +64)、 "")&CHAR(MOD(COLUMN()-1,26)+65)&ROW()

この関数は、「ZY1」またはcolumn = 701まで有効です


4
これらの関数が何であるかを説明することにより、この答えを拡大してください。
ケビンパンコ

Excelで現在の列名(「A1」、「B1」など)を取得します。「AA1」、「BA1」、「CA1」などのように上に...
ayus

-1
=IF(COLUMN()>702,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),4),3),IF(COLUMN()>26,RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),3),2),RIGHT(LEFT(ADDRESS(ROW(),COLUMN()),2),1)))
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.