发布网友 发布时间:2022-04-30 13:57
共4个回答
热心网友 时间:2022-06-22 20:59
这个也简单啊
以32进制数存在A1单元格,输出10进制存入B1单元格为例,程序如下,
自动当A1值变化时执行,
从第一个字符开始分大写字母、小写字母、数字的情况判断当前值,把之前的结果乘以32进制的32后加上当前的字符代表值
额 没注意32进制数的中间有几个字母是不用的,多加几个判断吧
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a1 As Integer
Dim a2 As Integer
Dim i As Integer
On Error GoTo ERRORHANDLER
If Target.ROW = 1 And Target.Column = 1 Then '如果第一行第一列的值发生变化的话(A1单元格)
a1 = Len(Cells(1, 1).Value) '先计算第一行第一列字符串的长度,并记为a1
a2 = 0 'a2作为单词的字符和,初始设定为0
For i = 1 To a1 '从第一个到最后一个字符
If (Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) + 1 - Asc("A")) >= 1 And (Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) + 1 - Asc("A")) <= 22 Then
a2 = 32 * a2 + Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) + 10 - Asc("A") '大写字母情况,a2每次在原基础上*32,加上这个新字符代表的数值 ,数值跟字符本身有关
ElseIf (Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) + 1 - Asc("a")) >= 1 And (Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) + 1 - Asc("a")) <= 22 Then
a2 = 32 * a2 + Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) + 10 - Asc("a") '小写字母情况,a2每次在原基础上*32,加上这个新字符代表的数值 ,数值跟字符本身有关
ElseIf (Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) + 1 - Asc("0")) >= 1 And (Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) + 1 - Asc("0")) <= 10 Then
a2 = 32 * a2 + Asc(Left(Right(Cells(1, 1).Value, a1 + 1 - i), 1)) - Asc("0") '数值0~9情况,a2每次在原基础上*32,加上这个新字符代表的数值 ,数值跟字符本身有关
Else
MsgBox ("出现非法字符") '其他情况,比如出现逗号,数字什么的时候直接报错
GoTo ERRORHANDLER
End If
Next
Cells(1, 2).Value = a2 '最后将计算出的值赋给第二行第一列即B1单元格
End If
ERRORHANDLER:
End Sub
热心网友 时间:2022-06-22 21:00
1、用VBA写一个自定义函数,如函数名写为 to36( )热心网友 时间:2022-06-22 21:00
目前,EXCEL还只有2、8、10、16的互转函数,跟不上计算机的发展速度了。热心网友 时间:2022-06-22 21:01
EXCEL没有32进制的相关函数..