在Excel VBA中将字符串转换为十六进制

7

我需要在我的Excel VBA宏中将字符串转换为十六进制。

我尝试了以下方法:

Dim val As String
val = "10"
Dim hexVal As Integer
hexVal = Convert.ToInt32(val, 16)

但是Convert.ToInt32(val, 16)不起作用,我猜是因为它不是VB.NET?

无论如何,我可以使用CInt(val)将字符串转换为整数,但如果我有一个十六进制值的字符串表示,例如“3366CC”,我该如何将其转换为十六进制以便我可以对其进行十六进制计算?

2个回答

13

在VBA中,你需要使用&H字面量来操作:

value = val("&H" & "10") '// 16
value = val("&H3366CC")  '// 3368652

编辑

Function FromHex(hexString As String) As Long
    FromHex = Val("&H" & hexString)
End Function

那么。
resultString = hex$(FromHex("3366CC") / FromHex("A"))

或者针对常量;

resultString = hex$(FromHex("3366CC") / &HA)

我该如何执行十六进制计算,例如 3366CC / A 以得到 523E1 - Tanvir
3
请注意,如果您的十六进制数在8000到ffff之间,它将被视为16位带符号整数。例如:&hD001将被视为-12287。若要显式地将其视为32位带符号整数,请在数字后加上“&”,例如&hd001& -> 53249。 - Bart

7

请考虑:

Sub dural()
    Dim val As String, hval As String
    val = "10"
    hval = Application.WorksheetFunction.Dec2Hex(val)
    MsgBox hval
End Sub

VBA代码需要知道或做出一个关于输入字符串的假设。上面的代码假设该字符串代表一个十进制值。

如果输入字符串是十六进制,那么:

Sub dural2()
    Dim val As String, hval As Long
    val = "10"
    hval = Application.WorksheetFunction.Hex2Dec(val)
    MsgBox hval
End Sub

这里的hval可以进行算术运算。


这个只是将十进制转换为十六进制,如果我有一个字符串 val = "3366CC" 并且需要将其转换为十六进制以执行十六进制计算,例如 3366CC / A 得到 523E1,该怎么办? - Tanvir
@taa VBA 需要知道输入字符串的基数..........100 真的是 100 十进制还是 256 十进制? - Gary's Student

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接