搜索
bottom↓
回复: 5

VBA 中如何把数字转换为十六进制的数字,如15,怎...

[复制链接]

出0入16汤圆

发表于 2017-3-22 08:52:55 | 显示全部楼层 |阅读模式
下面程序,当Mydec =9 时(转换后不包含A--F),则TransftoHEX 数值类型为数字,但Mydec =15 时,TransftoHEX 数值类型自动为STRING 型。

有没办法把15转为数字形式的HEX?

Private Sub CommandButton1_Click()

Dim MYdec As Long
'Dim TransToHex As long' 如果转换后的数字包含A...F 将报数据类型不匹配错误
Dim TransToHex As Variant

Dim MYhexToDec As Variant


MYdec = 15

TransToHex = Hex(MYdec)

MYhexToDec = Val(TransToHex)



End Sub

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2017-3-22 08:52:56 | 显示全部楼层
如下:
只需要把你程序中的:
       MYhexToDec = Val(TransToHex)
改为:
      MYhexToDec = Application.Hex2Dec(TransToHex)
即可。

出0入0汤圆

发表于 2017-3-22 09:33:59 | 显示全部楼层
计算机中的数字格式有定点浮点整形等,没有进制的,或者说目前都是用二进制处理;
通常所谓的二进制,十进制,十六进制都是字符串

出0入42汤圆

发表于 2017-3-22 10:03:53 | 显示全部楼层
本帖最后由 wangjiati 于 2017-3-22 10:08 编辑

Private Function myMod(a As Variant, b As Integer) As Integer
   Dim I As Integer
   For I = 1 To Len(a)
      If I = 1 Then
         myMod = CInt(Mid(a, I, 1)) Mod b
      Else
         myMod = (myMod * 10 + CInt(Mid(a, I, 1))) Mod b
      End If
   Next
End Function



Public Function CHANGE_10TO36(number As Variant) As String
    Dim remainder As Variant
    Dim a As Variant
    Dim result As String
    If number >= 1 Then
         table_36 = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", _
                             "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
         a = Fix(number / 36)
         remainder = myMod(number, 36)
         result = table_36(remainder) & result
         
         Do While a >= 36
             remainder = myMod(a, 36)
             result = table_36(remainder) & result
             a = Fix(a / 36)
         Loop
         If a > 0 Then
            a = Fix(a)
            result = table_36(a) & result
         End If
         CHANGE_10TO36 = result
    Else
        CHANGE_10TO36 = 0
    End If   
End Function


=DEC2HEX(C9)//16进制自带函数

出0入16汤圆

 楼主| 发表于 2017-3-22 13:04:32 | 显示全部楼层
GoingDown 发表于 2017-3-22 09:29
如下:
只需要把你程序中的:
       MYhexToDec = Val(TransToHex)

对的,是这样,谢谢
还有个问题请教下,当需要转换的十进制是正数时,得到的16进制字符串是8 位,但为负数时,是10位的长度。

如下:

Dim Target_inc As Variant
Dim Target_inc_HEX As Variant

Target_inc_HEX = Application.WorksheetFunction.Dec2Hex(Target_inc_Dec, 8)

Target_inc_Dec=-10 时. Target_inc_HEX =“FFFFFFFFF6”      --------10 位

Target_inc_Dec=10 时. Target_inc_HEX =“00000006”        -------8 位


因为要用下面的函数把两位两位分开,如果是8位,刚好4组,可负数出来10位,怎么弄?

   Target_inc_HEX_Seperated(0) = Mid(Target_inc_HEX, 7, 2)
    Target_inc_HEX_Seperated(1) = Mid(Target_inc_HEX, 5, 2)
    Target_inc_HEX_Seperated(2) = Mid(Target_inc_HEX, 3, 2)
    Target_inc_HEX_Seperated(3) = Mid(Target_inc_HEX, 1, 2)

出0入0汤圆

发表于 2017-3-22 14:07:03 | 显示全部楼层
TigerFish 发表于 2017-3-22 13:04
对的,是这样,谢谢
还有个问题请教下,当需要转换的十进制是正数时,得到的16进制字符串是8 位,但为负 ...

我也不知道VBA的负数怎么用这种表示方法,即然负数这种形式,你可以把正数指定为负数同样的长度, Dec2Hex(postive_num,10). 这样的话,你就可以统一用Mid处理了,下标从2开始。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 13:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表