2011-07-28 14:32:58 +0000 2011-07-28 14:32:58 +0000
31
31

エクセルで現在の列名を取得する方法を教えてください

エクセルでセルの現在の行番号と現在の列名を取得する関数を教えてください。

回答 (16)

34
34
34
2012-11-28 18:31:28 +0000

次の関数を試してみてください:

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

説明: ADDRESS(row_num, column_num, [abs_num]). つまり、返される値には’$‘がないということです。列'AB'の場合、[abs_num] = 4は'AB1'を返します。代入は'1'を削除します。

33
33
33
2011-07-28 14:38:34 +0000

これを行うには、ROWCOLUMN関数を使用することができます。これらの数式の引数を省略すると、現在のセルが使用されます。これらは、 OFFSET関数 など、行と列の両方を数値で指定できる関数を直接使うことができます。

例えば、セルD8に=ROW()を入力すると8が返され、同じセルに=COLUMN()を入力すると4が返されます。

それでもカラムの文字を取得したい場合は、カラム番号に 64 を足すだけでよいので (64 は CHAR より 1 文字少ない文字です)、先ほどの例では、セルの値を A に設定すると、返される値は =CHAR(COLUMN()+64) になります。セルの値をセルの位置そのものにしたい場合は、完全な数式は D となります。


念のため、私はアスキーテーブルから 64 を取得しました。また、=CHAR(COLUMN()+64) & ROW()の式を使うこともできますので、これを使って更新された式はCODEになります。=CHAR(COLUMN() + CODE("A") - 1)の最小値は常に1なので、1を引く必要があり、そうすると計算式全体の戻り値の最小値はCOLUMNになります。

しかし、これは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()

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

5
5
5
2012-10-16 10:40:38 +0000

次のようにしてみてください

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

これは、$などを使わずに、正確なカラムヘッダを提供します。

2
2
2
2012-10-17 13:29:15 +0000

やや手動ですが、より少ないVBAとより簡単な式:

  • Excelの行、例えばセルA1では、列番号=column() を入力してください - 下の行では、=Address(1,A1) を入力してください - これは、結果を提供します$A$1

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

2
2
2
2012-09-26 10:28:31 +0000

特定のセルの場合:

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

現在のセルの場合:

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

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

=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
2
2
2
2012-12-14 12:14:35 +0000

これも同様に動作します

=MID(CELL("address"),2,FIND("$",CELL("address"),2)-2)
2
2
2
2012-09-20 00:42:23 +0000

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

Español :

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

English :

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

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

1
1
1
2012-03-18 00:18:43 +0000
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())

ここで colid は、ワークブック内の他の場所で作成した、複数の行を持つ 2 つの隣接する列からなる named 範囲を指します:最初の列には COLUMN() の番号に対応する 1 から n までの数字を、2 番目の列には A から ZZZ までの文字を、またはあなたが収容したい列の数だけ参照します。ROW()は、行番号を返すためにそのままで構いません。

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

これにより、例えば、MySheet1を作業領域として使用して、新しいデータを削除したり、再挿入したりすることができます。

1
1
1
2013-10-28 05:25:56 +0000

磨きエクセルバージョンのためのソリューション:

-特定のセルのために:

=PODSTAW(PODSTAW(KOMÓRKA("adres";B1);"$" & WIERSZ();""); "$"; "")

-現在のセルのために:

=PODSTAW(PODSTAW(KOMÓRKA("adres");"$" & WIERSZ();""); "$"; "")
0
0
0
2013-02-18 17:45:01 +0000
=MID(ADDRESS(ROW(),COLUMN()),2,FIND("$",ADDRESS(ROW(),COLUMN()),2)-2)

アドレス式は、列名と行名を返すことで動作します。返されるフォーマットは常に $(Column Letters)$(Row Numbers) - 例えば $AA$2 または $XAA$243556

もし $ が常に最初の文字から始まることがわかっているならば、最初の中間式を使って最初の $ 記号の後の文字 (つまり 2 番目の文字) を引っ張り始めることができます。あとは単純な引き算です。

0
0
0
2012-04-23 20:53:04 +0000

これは、VBA、ユーザー定義式、ソリューションです。

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を返します。

0
0
0
2013-06-08 18:18:18 +0000

これを試してみてください:

=LEFT(ADDRESS(1,COLUMN(),4),LEN(ADDRESS(1,COLUMN(),4))-1)
0
0
0
2013-05-22 14:10:46 +0000

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

=RIGHT(LEFT(ADDRESS(1,COLUMN()),LEN(ADDRESS(1,COLUMN()))-2),LEN(ADDRESS(1,COLUMN()))-3)
0
0
0
2014-05-07 19:56:32 +0000

次の式はどこに置いても動作します(列名を返してくれます)。

-1
-1
-1
2013-12-31 20:49:13 +0000
=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)))
-1
-1
-1
2013-11-06 14:00:47 +0000

try this:

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

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