永发信息网

如何用将VBA将单元格中的16进制转换为10进制?

答案:2  悬赏:20  手机版
解决时间 2021-01-24 13:19
  • 提问者网友:兔牙战士
  • 2021-01-24 04:24
如何用将VBA将单元格中的16进制转换为10进制?
最佳答案
  • 五星知识达人网友:撞了怀
  • 2021-01-24 05:32
Sub 十六进制转换十进制()
On Error Resume Next
Dim i As Integer
For i = 1 To [a65535].End(3).Row()
Cells(i, 1) = Application.WorksheetFunction.Hex2Dec(Cells(i, 1))
Next
End Sub
刚学VBA。不怎么会。对于像0X0这种不是十六进制的没进行处理(不会加个判断是否为16进制,见怪~~!)。只是把16进制的转换成了10进制。代码放在模块。
Sub 十六进制转换十进制()
On Error Resume Next
Dim i As Integer
For i = 1 To [a65535].End(3).Row()
If Len(Cells(i, 1)) <> 0 And Not (Cells(i, 1) Like "*[!0-9A-Fa-f]*") Then
Cells(i, 1) = Application.WorksheetFunction.Hex2Dec(Cells(i, 1))
Else
Cells(i, 1).Clear
End If
Next
End Sub
现在加入了判断,不是16进制的做清空相应单元格处理。
全部回答
  • 1楼网友:刀戟声无边
  • 2021-01-24 06:09
Public Function HOD(sH As String)
    On Error GoTo Err_Zone
    Dim iCount As Integer, Dec As Single, e As Integer
    Dim sHH As String
    iCount = Len(sH)
    Dec = 0
    e = 0
    For k = iCount To 1 Step -1
        iD = HODS(Mid(sH, k, 1))
        If iD = 16 Then HOD = "#VALUE!": Exit Function
        iD = iD * Application.WorksheetFunction.Power(16, e)
        HOD = iD + HOD
        e = e + 1
    Next
    Exit Function
Err_Zone:
    MsgBox "数据无效!"
End Function
自定义函数追问
这一列单元格在wb文件的F列,程序中a是最大行数。我这样把程序嵌套进去,总提示expected end sub 
追答! 天啊 还带你这么玩的啊
这是单独的一个子程序, 你分开放 在你的程序里面调用就可以了啊
调用不会吗
CELLS(i,1)=hod(cells(i,1))追问可是我的最终目的是一键调用,将目标文件调入,目标文件中的16进制一列自动转换为10进制,然后复制到当前工作表的某一列。由于调入文件较多,所以调用的程序尽可能嵌套在一起。不知能否有别的方法。不过还是非常感谢你的追答把我的程序 放在你的 程序的后面 END SUB 之后
在 SH=MId(...........) 之后
加一个调用函数转换 16进制
wb.sheets(1).cells(j,6)= hod(sh)
另外用系统自带的转换函数也是可以的
wb.sheets(1).cells(j,6)= Application.WorksheetFunction.Hex2Dec(sh)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯