试试下面的函数:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
解析:ADDRESS(row_num, column_num, [abs_num])
.[abs_num] = 4
=相对地址。这意味着返回的值中没有’$‘。对于'AB'列,ADDRESS
将返回'AB1'。替换掉'1'。
你可以使用ROW
和COLUMN
函数来完成这个操作。如果你省略了这些公式的参数,则使用当前单元格。这些函数可以直接与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`)。
试试这个
=SUBSTITUTE(SUBSTITUTE(CELL("address"),"$" & ROW(),""), "$", "")
&001
这给了你准确的列标题,没有任何$等。
为了得到列名,我使用了以下公式。
对于特定的单元格:
=SUBSTITUTE(CELL("address",H3),"$" & ROW(H3),"")
对于当前的单元格:
=SUBSTITUTE(CELL("address"),"$" & ROW(),"")
试试这个变化。它可以在3个字母列上工作,并且不在前面留下"$“:
=SUBSTITUTE(ADDRESS(ROW(XFD123),COLUMN(XFD123),4),ROW(XFD123),"")
另一种可能的方法是使用这样的方法:
=INDIRECT("MySheet1!"&LOOKUP(COLUMN(),colid)&ROW())
其中colid
指的是你在工作簿的其他地方创建的一个named范围,由两个相邻的列和多行组成:第一列包含数字1到n对应于COLUMN()
的数字,第二列包含字母A - ZZZ,或者是你希望容纳的列引用。
所以如果你把上面的字符串复制到 “MySheet2 "的A1单元格中,它将以ROW()
的形式返回相应的值。
这将使您可以使用=MySheet1!A1
作为一个工作区,删除和重新插入新的数据,而在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()中的任意单元格将返回该单元格的列号。
下面的公式无论你把它放在哪里都有效(它会给你返回列名)。