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

如图,将单元格中的16进制转换为10进制数字,并放回原单元格
hex2dec貌似不能用,我用的是excel2007

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个回答  2019-08-10
不用搞的那么复杂,在VBA中直接使用下面的等式即可:
16进制转10进制:[A1] = 1*("&H" & [A1]) 或 Cells(1, "A") = 1*("&H" & Cells(1, "A"))
10进制转16进制:[A1] = Hex([A1]) 或 Cells(1, "A") = Hex(Cells(1, "A"))
第2个回答  2014-09-15
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)