次の関数を試してみてください:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
説明: ADDRESS(row_num, column_num, [abs_num])
. つまり、返される値には’$‘がないということです。列'AB'の場合、[abs_num] = 4
は'AB1'を返します。代入は'1'を削除します。
これを行うには、ROW
、COLUMN
関数を使用することができます。これらの数式の引数を省略すると、現在のセルが使用されます。これらは、 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
で文字の代わりに列番号を使用するなど)。
次のようにしてみてください
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
これは、$などを使わずに、正確なカラムヘッダを提供します。
特定のセルの場合:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
現在のセルの場合:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
このバリエーションを試してみてください。それは3文字の列で動作し、フロントエンドに「$」を残していません:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
これを任意のセルに入力します:
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() を行番号に置き換えることができます。
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
ここで colid
は、ワークブック内の他の場所で作成した、複数の行を持つ 2 つの隣接する列からなる named 範囲を指します:最初の列には COLUMN()
の番号に対応する 1 から n までの数字を、2 番目の列には A から ZZZ までの文字を、またはあなたが収容したい列の数だけ参照します。ROW()
は、行番号を返すためにそのままで構いません。
ですから、上記の文字列を'MySheet2'のセルA1にコピーすると、=MySheet1!A1
として評価され、MySheet1
の対応するセルで見つけた値を返すことになります。
これにより、例えば、MySheet1
を作業領域として使用して、新しいデータを削除したり、再挿入したりすることができます。
これは、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を返します。
次の式はどこに置いても動作します(列名を返してくれます)。