VBA 代表列名转换:数字转换成字母

Excel中默认使用字母代表列(如第一列:A列)[本文中默认使用字母代表列],也可选择使用数字代表列(R1C1引用,第一列:1列)。在VBA代码中需要将公式赋值给单元格时,数值列数比较容易得到,但公式中使用字母代表列数更为方便,因此需要将数值转换为字母(如27列--->AA列)。

粗看起来有些类似十进制转换成十六进制,不过就是十进制转换成二十六进制,但有一点:十六进制中是从0开始到F,即:[0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F]。而此处字母则是从A开始[A-Z],换成数字则是从1开始[1-26],由于最小值不等于零,进位跟十六进制进位不一样。


十六进制进位时:F + 1 = 10(hex); F + 2 = 11(hex)

 此处(二十六进制)进位: Y + 1 = Z  <---26 (而不是 A0);   Z + 1 = AA   <---27

所以在由十进制转换为二十六进制时,当余数为零时,需要向前借一位(26),将余数改为:Z,此时被除数则需减去26。


废话不多说,以下为转换代码:

'*****************************************************************************
'将Excel中列数转换为列名(如27列--->AA列)
'参数:var 列数
'返回:列名 string
'*****************************************************************************
Public Function ChgNumToABC(ByVal var As Integer) As String
    Dim res As String  
    Dim remainder As Integer '余数
    Dim quotient As Integer    '商

    remainder = var Mod 26
    
    If remainder = 0 Then
        var = var - 26
        remainder = 26
    End If
    
    quotient = var \ 26
    
    If quotient <> 0 Then
        res = ChgNumToABC(quotient)
    End If
    
    ChgNumToABC = res & Chr(remainder + 65 - 1)
End Function


你可能感兴趣的:(VBA)