我需要得到我在Excel工作表中创建的逻辑列的字母。
当我点击一个单元格,假设H7,有数据23,我能够得到T excel列H,但出于某种商业目的,我想要A,这是第5行对应于一个单元格被选中的字母。如果假设它是56,我想要B。
图2显示了为什么我想要B而不是Excel列I,这是因为如果我插入一个列,我的Excel列字母将改变,但对应于B中逻辑列字母的数字将只保留在B中。
Public Function ColumnLetters(rInput As Range) As String
ColumnLetters = Split(rInput.Address, "$") (1)
End Function
如果提取的列字母是H,我需要它下面第5行的值A,依此类推。对于I,它是B,依此类推。
我这样做是为了插入额外的列,excel列字母会改变,但不会改变我的逻辑列字母。
有人能帮帮忙吗?
3条答案
按热度按时间uxhixvfz1#
正如FDavidov所说,如果我们正确理解了您的问题,您可以使用命名范围来实现这一点。
在下面显示的示例中,我突出显示了列A,并在
Name Box
(红色方块)中键入名称RefThisColumn
。我还只选择了单元格A1,并在Name Box
中键入RefThisCell
。然后,我可以在VBA中使用这些命名范围,而不必更新引用。
在插入列以将命名范围移动到列E(绿色方块)之后,我运行了完全相同的代码,得到了完全相同的结果:
xfyts7mz2#
您只想将列号转换为字母,对吗?
在你的Vba代码中,使用
Chr()
。这会把你输入的数字转换成一个字符。如果你输入
Chr(65)
,它会返回“A”。你现在只需要加上你的计算就可以到达你想要的字母。我不明白您到底想要什么,但作为一个示例,假设
col
是列号变量。Chr(64+col)
将为列1返回A。但是,如果要为第5列返回A,则需要像
Chr(60+col)
这样调整它13z8s7eq3#
将H5公式设置为:
然后将此公式扩展到其余列。
它获取当前单元格的行和列,生成
$H$5
的地址,并从中提取H,但它会使所有列相对于H列偏移,因此H变为A,I变为B,依此类推。如果您只需要A-Z,其他一些解决方案也可以,但这适用于超过26列的情况,如果您需要的话,可以在第27列中提供AA。