2014-10-14 27 views
5

Ho bisogno di convertire stringhe in esadecimali nella mia macro VBA di Excel.Conversione di stringhe in esadecimale in Excel VBA

ho provato:

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

ma Convert.ToInt32(val, 16) non funziona, sto cercando di indovinare perché non è VB.NET?

In ogni caso, posso utilizzare CInt(val) per convertire una stringa in un numero intero, ma se ho la rappresentazione di stringa di un valore esadecimale, ad es. "3366CC", come posso convertirlo in esadecimale così da poter eseguire calcoli esadecimali su di esso?

risposta

7

In VBA è necessario pasticciare con la &H letterale:

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

Modifica

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

Poi

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

O per le costanti, ovviamente;

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

Come eseguire un calcolo esadecimale come '3366CC/A' per ottenere' 523E1'? – Tanvir

+0

Aggiornato il precedente –

+3

Nota che se il tuo numero esadecimale è compreso tra 8000 e ffff, verrà considerato come un intero con segno a 16 bit. Ad esempio: & hD001 viene considerato come -12287. Per trattarlo esplicitamente come intero con segno a 32 bit, aggiungi il numero con &, ad esempio & hd001 & -> 53249. – Bart

5

considerare:

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

VBA codice ha bisogno di sapere o di fare una supposizione circa la stringa di input. Il codice precedente presuppone che la stringa rappresenti il ​​valore decimale.

Se la stringa di input è Hex, poi:

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

Qui Hval può essere utilizzato aritmeticamente.

+0

Questo non converte solo i decimali in esadecimali? Cosa succede se ho una stringa 'val =" 3366CC "' e ho bisogno di convertirlo in esadecimale per eseguire un calcolo esadecimale come '3366CC/A' per ottenere' 523E1'? – Tanvir

+0

Quindi '.Hex2Dec()' –

+0

@taa ** VBA ** deve conoscere la base della stringa di input .......... è _100_ veramente 100 decimale o 256 decimale –