【问题标题】:Convert column numeric value to alpha [duplicate]将列数值转换为 alpha [重复]
【发布时间】:2012-11-24 18:43:04
【问题描述】:

可能重复:
VBA function to convert column number to letter?

我需要显示一个显示上次使用的列的消息框。

现在显示的是列数值,但可以将其转换为等效的字母字符吗?

例如。第 5 列 = E 列。

谢谢

【问题讨论】:

  • 肖恩,感谢您提供的功能。他们做了我需要他们做的事。

标签: excel vba


【解决方案1】:

我设法获得了 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

另一个使用base 26,并且仅限于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 是无效单元格或

【讨论】:

  • 感谢您的功能。他们做了我需要他们做的事。
【解决方案2】:

这适用于 A 到 ZZ 列(正如 Sean Cheshire 在 cmets 中指出的那样):

Function ColLetter(ColNumber As Integer) As String
    ColLetter = Left(Cells(1, ColNumber).Address(False, False), 1 - (ColNumber > 26))
End Function

使用:MsgBox ColLetter(oRangeObject.Column)

【讨论】:

  • 这一直有效到第 703 列,为 AAA,但这会将其截断为 AA
  • 啊,对。我从不需要它过去 - +1 到你更完整的答案。
猜你喜欢
  • 2018-11-30
  • 2019-02-17
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多