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


30

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


1
我只是找到了函数LINCOL但是问题是它们返回数字,我需要向其输入列字母INDIRECT
贾德·迪亚斯

2
在这种情况下OFFSET,您可以将函数与INDIRECT公式结合使用,也可以代替公式。但是,如果您想使用字符串,我也会更新答案。
突破

顺便说一下,INDIRECT是一个易失性函数,因此请谨慎使用。如果您希望将参考值作为位置计算的基础,这听起来确实是OFFSET可能是一个更好的选择。
AdamV 2011年

Answers:


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()

我不确定是否有更简单的方法可以做到,但是我知道从单元A1到工作都ZZ99没有问题。但是,这说明了为什么最好避免使用基于字母的列标识符,而坚持使用基于纯数字的公式(例如,使用列号代替带有的字母OFFSET)。


它仅适用于前26列。但这可以。
Jader Dias

1
@Jader Dias,这就是为什么我建议您使用@Jader Dias的原因OFFSET,它允许您将列指定为数字。无论如何,我都使用公式更新了答案,以将其扩展为可使用两个字母的列。
突破

2
我不知道为什么当苏格兰人的答案好得多时,这个答案为什么会得到如此多的选票,只是他没有解释。无需复杂的公式。我添加了评论以解释其原因/工作方式。
Gerhard Powell,

这将一直有效,直到您移至AA等,然后它将无法正常工作。
krystan荣誉2014年

@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”。


5

尝试这个

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

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


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)

您可以将row()替换为行号。


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空白。



1

另一种可能的方法是使用如下所示的内容:

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

其中colid指的是您将在工作簿中其他位置创建的命名范围,该相邻范围包括两行相邻的两行并包含多行:第一列包含与该数字相对应的数字1到n COLUMN(),第二列包含字母A-ZZ,或者有许多列引用您希望容纳。将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)中的任何细胞将返回

在INDIRECT函数内创建通用公式时,此用户定义函数非常有用。


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

地址公式通过返回列名和行名来工作。返回的格式将始终为$(Column Letters)$(Row Numbers)-例如,$AA$2$XAA$243556

如果我们知道$将始终出现在第一个字符处,则可以使用第一个中间公式在第一个$符号(即第二个字符)之后开始提取字符。

然后,我们找到下一个$符号(因为我们知道只有两个),并且知道第一个和第二个美元符号之间有多少个字符。剩下的就是简单的减法。


0

您可以通过以下方法找到列标题(即字母):

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

0

尝试这个:

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

0

不管将其放在哪里,以下公式均有效(它将返回列名称)。

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

-1

尝试这个:

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

此功能有效,直到“ ZY1”或列= 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)))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.