学以致用——使用VBA函数将十进制数字转换为字母(二十六进制)(Convert a number to letters (Excel Column number to name))

利用空闲时间,开发了一个十进制转换为字母(相当于26进制)的函数。功能有:

1. 给定Excel列标,返回对应的列名(如,第677列对应的列名为“ZA”)(但是,Excel中的列最多为16384列,对应的列名为XFD)

2. 给定任意正长整形数值(即,1到2147483647),可返回对应的字母

3. 可通过VBE immediate窗口查看计算过程(debug print)

代码:

Function GetExcelColumnNameF(columnNumber As Integer)

    Dim dividend As Integer
    Dim columnName As String
    Dim modulo As Integer
    Dim n As Integer '循环次数
    
    dividend = columnNumber
    Debug.Print "Input: ColumnNumber = " & columnNumber
    Debug.Print "Calculation process:" & vbNewLine

    While (dividend > 0)
        n = n + 1
        modulo = (dividend - 1) Mod 26
        Debug.Print "Iteration No." & n
        Debug.Print "dividend = " & dividend & ", modulo = (dividend - 1) Mod 26 = " & modulo
        columnName = Chr(65 + modulo) + columnName
        dividend = Round((dividend - modulo) / 26, 0)
        Debug.Print "columnName = " & columnName & ", dividend = Round((dividend - modulo) / 26, 0) = " & dividend & vbNewLine
    Wend
    GetExcelColumnNameF = columnName
    Debug.Print "Result: ColumnNumber = " & columnNumber & " <--> ColumnName = " & columnName & vbNewLine & vbNewLine
   
End Function

调试输出(Log):

Input: ColumnNumber = 16382
Calculation process:

Iteration No.1
dividend = 16382, modulo = (dividend - 1) Mod 26 = 1
columnName = B, dividend = Round((dividend - modulo) / 26, 0) = 630

Iteration No.2
dividend = 630, modulo = (dividend - 1) Mod 26 = 5
columnName = FB, dividend = Round((dividend - modulo) / 26, 0) = 24

Iteration No.3
dividend = 24, modulo = (dividend - 1) Mod 26 = 23
columnName = XFB, dividend = Round((dividend - modulo) / 26, 0) = 0

Result: ColumnNumber = 16382 <--> ColumnName = XFB

效果图:





扫描二维码关注公众号,回复: 1499395 查看本文章

参考文章:

https://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into-an-excel-column-eg-aa

猜你喜欢

转载自blog.csdn.net/hpdlzu80100/article/details/80571216
今日推荐