获取Excel中单元格的当前行号和当前列名的功能是什么?
OFFSET
,您可以将函数与INDIRECT
公式结合使用,也可以代替公式。但是,如果您想使用字符串,我也会更新答案。
获取Excel中单元格的当前行号和当前列名的功能是什么?
OFFSET
,您可以将函数与INDIRECT
公式结合使用,也可以代替公式。但是,如果您想使用字符串,我也会更新答案。
Answers:
您可以使用ROW
和COLUMN
函数执行此操作。如果省略这些公式的参数,则使用当前单元格。这些可以直接使用与所述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
)。
OFFSET
,它允许您将列指定为数字。无论如何,我都使用公式更新了答案,以将其扩展为可使用两个字母的列。
However, this will not work with two-letter columns. In that case, you need the following formula to properly parse two-letter columns:
尝试以下功能:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
说明:ADDRESS(row_num, column_num, [abs_num])
。[abs_num] = 4
=相对地址。这意味着返回值中没有'$'。对于“ AB”列,ADDRESS
将会返回“ AB1”。替代者删除“ 1”。
为了获得列名,我使用以下公式。
对于特定的单元格:
=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
指的是您将在工作簿中其他位置创建的命名范围,该相邻范围包括两行相邻的两行并包含多行:第一列包含与该数字相对应的数字1到n COLUMN()
,第二列包含字母A-ZZ,或者有许多列引用您希望容纳。将ROW()
被罚款离开,因为它是返回的行数。
因此,如果要将上面的字符串复制到“ MySheet2”的单元格A1中,它将评估为=MySheet1!A1
,并返回在的相应单元格中找到的值MySheet1
。
例如,这将使您能够MySheet1
用作工作区,删除和重新插入新数据,而MySheet2
引用这些内容的任何格式或计算将继续与目标选项卡式工作表中的新数据集一起正常使用。
这是一个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函数内创建通用公式时,此用户定义函数非常有用。
LIN
,COL
但是问题是它们返回数字,我需要向其输入列字母INDIRECT
。