web-dev-qa-db-ja.com

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

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

27
Jader Dias

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

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

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

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


ちなみに、私はASCIIテーブルから64個取得しました。 CODE式を使用することもできます。そのため、これを使用して更新された式は=CHAR(COLUMN() + CODE("A") - 1)になります。 COLUMNの最小値は常に1なので、式1全体の最小戻り値はBになるので、1を引かなければなりません。

ただし、これは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では文字の代わりに列番号を使用)。

32
Breakthrough

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

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

説明:ADDRESS(row_num, column_num, [abs_num])[abs_num] = 4 =相対アドレス。つまり、戻り値に '$'がありません。列 'AB'の場合、ADDRESSは 'AB1'を返します。代用者は '1'を削除します。

34
Scot Sutton

これを試して

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

これはあなたに正確な列見出しを与えます。

5
gaurav aggarwal

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

特定のセルの場合:

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

現在のセルの場合:

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

このバリエーションを試してください。これは3文字のカラムで動作し、フロントエンドに "$"を残しません。

=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
2
Vikas Madaan

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

スペイン語

=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
sygn

これもうまくいくでしょう

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

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

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

値がコピーされたら、$1を見つけて空白に置き換えます。

2
Steve

別の可能な方法はこのようなものを使うことでしょう:

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

colid名前付きの範囲を指し、複数の行を持つ2つの隣接する列で構成されるワークブック内の他の場所にあります。 COLUMN()番号には、2番目の文字にはAからZZまでの文字が含まれていますが、収容したい列参照も多数あります。 ROW()は、行番号を返すためのものです。

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

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

1
Tigger

ポーランド版のExcel版の解決策:

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

これが、列見出し(つまり文字)を見つける方法です。

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

これが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
GollyJer

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

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

アドレス式は、列と行の名前を返すことによって機能します。返されるフォーマットは常に$(Column Letters)$(Row Numbers)になります - 例えば$AA$2または$XAA$243556

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

次に、次の$記号が見つかり(2つしかないことがわかっているので)、最初の2番目のドル記号と2番目のドル記号の間にある文字数がわかります。残りは単純な引き算です。

0
Jon

これを試して:

=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)
0
denz