VBA写表格列的数字和字符串相互转换函数

VBA写表格列的数字和字符串相互转换函数

Excel 的 VBA 中 列 的 大写表示(如“A”列) 数字表示(如第“1”列) 转换是很普遍的,习惯的表示是 大写表示(如“A”列) 这种,在VBA中经常用到的从A列切换到B列时,或者特殊一点的从Z列切换到AA列时,就需要做相应的转换。故写两个函数,实现这种转换。

Excel VBA 函数 NumToChars:

'(因为知乎没有VBA语言选项,故用 VB.net代替,实际使用可替换,但无高级语言特性)
'数字转字符串
Public Function NumToChars(ByVal Num As Double) As String
    Dim Str As String
    Dim Lin1, Lin2, Lin3, Lin4 As Double
    '一位转换
    If Num <= 0 Then
        Str = "A"
    '一位转换
    ElseIf Num <= 26 Then
        Str = VBA.Chr(Num + 64)
    '两位转换
    ElseIf Num <= 702 Then
        Lin2 = Num Mod 26
        If Lin2 = 0 Then Lin2 = 26
        Num = Num - 1
        Lin1 = Int(Num / 26)
        Str = VBA.Chr(Lin1 + 64) & VBA.Chr(Lin2 + 64)
    '三位转换
    ElseIf Num <= 16384 Then
        Lin3 = Int((Num - 27) / 676)
        Lin4 = Num - Lin3 * 676
        Lin2 = Lin4 Mod 26
        If Lin2 = 0 Then Lin2 = 26
        Lin4 = Lin4 - 1
        Lin1 = Int(Lin4 / 26)
        Str = VBA.Chr(Lin3 + 64) & VBA.Chr(Lin1 + 64) & VBA.Chr(Lin2 + 64)
        Str = "XFD"
    End If
    NumToChars = Str
End Function

Excel VBA 函数 NumToChars:

'字符串转数字
Public Function CharsToNum(ByVal Chars As String) As Double
    '把参数指定的字符列(A~XFD)转换为10进制的列号(1~16384),大小写均可
    '定义返回值
    Dim Ret
    Ret = 0
    '预处理容错:
    Chars = UCase(Chars)
    Chars = VBA.Replace(VBA.Replace(VBA.Trim(Chars), " ", ""), " ", "")
    If VarType(Chars) = vbString And VBA.Len(Chars) > 0 Then
        '第1位字母
        Ret = Asc(VBA.Left(Chars, 1)) - 64
        '第2位字母
        If VBA.Len(Chars) >= 2 Then
            Ret = Ret * 26 + Asc(VBA.Mid(Chars, 2, 1)) - 64
            '第3位字母
            If VBA.Len(Chars) >= 3 Then