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

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

Advertisement

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

Advertisement
Advertisement

答案 (16)

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

试试下面的函数:

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

解析:ADDRESS(row_num, column_num, [abs_num]).[abs_num] = 4 =相对地址。这意味着返回的值中没有’$‘。对于'AB'列,ADDRESS将返回'AB1'。替换掉'1'。

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

你可以使用ROWCOLUMN函数来完成这个操作。如果你省略了这些公式的参数,则使用当前单元格。这些函数可以直接与OFFSET函数一起使用,或者任何其他可以指定行和列为数值的函数。我不建议使用字母来表示列,因为当传递到双字母列名时,事情就会变得很棘手(无论如何,只使用数字更符合逻辑)。如果你想让一个单元格的值是单元格的位置,那么完整的公式就是=ROW()。你也可以使用=COLUMN()公式,所以用这个公式更新的公式就是CHAR。你必须减去1,因为A的最小值总是1,那么整个公式的最小返回值就是=CHAR(COLUMN()+64)。在这种情况下,你需要用下面的公式来正确解析两个字母列:

=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()
``` &001 

我不确定是否有更简单的方法,但我知道从单元格`D`到`=CHAR(COLUMN()+64) & ROW()`都没有问题。然而,这说明了为什么最好避免使用基于字母的列标识符,而坚持使用纯数字的公式(例如,用列号代替字母与`CODE`)。
5
Advertisement
5
5
2012-10-16 10:40:38 +0000
Advertisement

试试这个

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

&001

这给了你准确的列标题,没有任何$等。

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

略为手动,但少了VBA和一个比较简单的公式:

–在Excel的一行中,如A1单元格,输入列号=column() –在下面的一行中,输入=Address(1,A1) –这样就可以得到$A$1

的结果$ 复制值后,找到1和&007,用空白代替&007。

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

为了得到列名,我使用了以下公式。

对于特定的单元格:

=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
Advertisement
2
2
2012-09-20 00:42:23 +0000
Advertisement

在任意单元格中键入:

西班牙语 :

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

英语 :

&001

你可以用行号代替列()。

1
1
1
2012-03-18 00:18:43 +0000

另一种可能的方法是使用这样的方法:

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

其中colid指的是你在工作簿的其他地方创建的一个named范围,由两个相邻的列和多行组成:第一列包含数字1到n对应于COLUMN()的数字,第二列包含字母A - ZZZ,或者是你希望容纳的列引用。

所以如果你把上面的字符串复制到 “MySheet2 "的A1单元格中,它将以ROW()的形式返回相应的值。

这将使您可以使用=MySheet1!A1作为一个工作区,删除和重新插入新的数据,而在MySheet1中的任何格式化或计算中引用这些内容的格式化或计算将继续与目标工作表中的新数据集正常工作。

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

抛光Excel版本的解决方案:

—对于特定单元格:

=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

如果我们知道$总是出现在第一个字符上,我们可以使用第一个中间公式开始在第一个$符号(即第二个字符)之后开始拉字符。剩下的就是简单的减法了。

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()中的任意单元格将返回该单元格的列号。

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 "或列=701为止

Advertisement