可能重复:
将列号转换为字母的 VBA 函数?
我需要显示一个显示最后使用的列的 msgbox。
现在显示列数值,但可以将其转换为等效的字母字符吗?
前任。第 5 列 = E 列。
谢谢
我设法得到了2种方法。一个依赖于 excel Cells
,因此如果您使用无效列,它会失败:
Function NumToLetter(q As Long) As String
Dim Add As String
'Ignore error so it fails on an invalid cell
On Error Resume Next
Add = Cells(1, q).Address
If Len(Add) Then
NumToLetter = Mid(Add, 2, InStr(2, Add, "$") - 2)
Else
NumToLetter = "Invalid Cell"
End If
End Function
另一个使用基数 26,并且仅限于 bu 的最大值long
:
Function Num2Letter(q As Long) As String
Dim r As Long
While q > 0
r = q Mod 26
If r = 0 Then r = 26 ' needed for column Z
Num2Letter = Chr(64 + r) & Num2Letter
q = Int(q / 26) + (r = 26) ' fix for column Z
Wend
End Function
使用消息框测试这些值:
msgbox "Column 2445 is " & NumToLetter(2445) & " or " Num2Letter(2445)
第 2445 列是 CPA 或 CPA
msgbox "Column 42445 is " & NumToLetter(42445) & " or " Num2Letter(42445)
列 42445 是无效单元格或 BJTM
msgbox "Column -1 is " & NumToLetter(-1) & " or " Num2Letter(-1)
列 -1 是无效单元格或
这适用于 A 到 ZZ 列(如 Sean Cheshire 的评论中所指出的):
Function ColLetter(ColNumber As Integer) As String
ColLetter = Left(Cells(1, ColNumber).Address(False, False), 1 - (ColNumber > 26))
End Function
要使用:MsgBox ColLetter(oRangeObject.Column)