如何在Excel中获取当前列名?

Jad*_*ias 34 microsoft-excel-2007 worksheet-function microsoft-excel

Excel中获取单元格的当前行号和当前列名的函数是什么?

小智 43

尝试以下功能:

=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
Run Code Online (Sandbox Code Playgroud)

解释:ADDRESS(row_num, column_num, [abs_num])[abs_num] = 4= 相对地址。这意味着返回值中没有“$”。对于列“AB”,ADDRESS将返回“AB1”。替代品删除“1”。


Bre*_*ugh 33

您可以使用ROWCOLUMN函数来执行此操作。如果省略这些公式的参数,则使用当前单元格。这些可以直接使用与所述OFFSET功能,或者任何其他函数,其中可以同时指定行和列作为数值。

例如,如果=ROW()在单元格 D8 中输入,则返回值是 8。如果=COLUMN()在同一单元格中输入,则返回值是 4。

如果你想要列字母,你可以使用该CHAR功能。我不建议使用字母来表示列,因为在传入双字母列名时事情会变得棘手(无论如何,只使用数字更合乎逻辑)。

无论如何,如果您仍然想要获取列字母,您可以简单地将 64 添加到列号(64 是少一个字符A),因此在前面的示例中,如果您将单元格的值设置为=CHAR(COLUMN()+64),则返回的值将是D. 如果您希望单元格的值是单元格位置本身,则完整的公式将为=CHAR(COLUMN()+64) & ROW().


仅供参考,我从 ASCII 表中得到了 64。您也可以使用该CODE公式,因此使用该公式的更新公式将为=CHAR(COLUMN() + CODE("A") - 1). 您必须减去 1,因为 的最小值COLUMN始终为 1,然后整个公式的最小返回值将是B

但是,这不适用于两个字母的列。在这种情况下,您需要以下公式来正确解析两个字母的列:

=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()
Run Code Online (Sandbox Code Playgroud)

我不确定是否有更简单的方法来做到这一点,但我知道从单元格A1ZZ99没有问题。然而,这说明了为什么最好避免使用基于字母的列标识符,并坚持使用纯基于数字的公式(例如,使用列号而不是带有 的字母OFFSET)。

  • 我不知道为什么当 Scot 的答案好得多时,这个答案得到了这么多票,只是他没有解释。不需要复杂的公式。我添加了一条评论来解释它为什么/如何工作。 (2认同)

小智 5

尝试这个

=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
Run Code Online (Sandbox Code Playgroud)

这为您提供了确切的列标题,没有任何 $ 等。