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