14-stellige Hex in Dezimalzahl in Excel

918
Ben

Ich habe 14-stellige Hexadezimalzahlen in Excel, die ich in eine Dezimalzahl umwandeln möchte.

In C2 beispielsweise lautet die Nummer 0438E96A095180, und dies muss dezimal 1188475064373632 sein.

Ich habe ein Modul in VBA ausprobiert, aber das funktioniert nicht:

' Force explicit declaration of variables Option Explicit  ' Convert hex to decimal ' In: Hex in string format ' Out: Double Public Function HexadecimalToDecimal(HexValue As String) As Double  ' If hex starts with 0x, replace it with &H to represent Hex that VBA will understand Dim ModifiedHexValue As String ModifiedHexValue = Replace(HexValue, "0x", "&H") HexadecimalToDecimal = CDec(ModifiedHexValue)  End Function 

Damit bekomme ich die Dezimalzahl 1188475064373630 anstelle von 1188475064373632.

Was mache ich falsch?

0
Sie können die `CInt`-Funktion verwenden. harrymc vor 5 Jahren 0
Danke AFH, ich habe die von Ihnen vorgeschlagenen Änderungen vorgenommen. Leider funktioniert es immer noch nicht. Alle letzten Zahlen enden mit einer 0 anstelle der Zahl, die es sein sollte. Ben vor 5 Jahren 0
Versuchen Sie, den Datentyp 'variant' anstelle von 'Double' zu verwenden. harrymc vor 5 Jahren 0
Excel hat nur eine 15-stellige Dezimalgenauigkeit, obwohl VBA unter Verwendung des Dezimal-Datentyps eine höhere Genauigkeit aufweisen kann. Um einen Wert mit mehr als 15 Stellen zurückzugeben, müssen Sie eine Zeichenfolge zurückgeben. zB: `HexadecimalToDecimal = CStr (CDec (ModifiedHexValue))`. Möglicherweise müssen Sie in allen Fällen ein "& H" -Startverfahren festlegen. Ron Rosenfeld vor 5 Jahren 0

1 Antwort auf die Frage

1
Ron Rosenfeld

Sie müssen den Wert als Zeichenfolge zurückgeben, zumindest wenn das Ergebnis eine Genauigkeit von mehr als 15 Stellen hat.

z.B:

Option Explicit ' Convert hex to decimal ' In: Hex in string format ' Out: Decimal in string format Public Function HexadecimalToDecimal(HexValue As String) As String  ' If hex starts with 0x, remove it to represent Hex that VBA will understand Dim ModifiedHexValue As String  ModifiedHexValue = "&H" & Replace(HexValue, "0x", "")  HexadecimalToDecimal = CDec(ModifiedHexValue) End Function 

Ich überlasse es Ihnen, die Länge zu testen und zu entscheiden, ob Sie eine Zeichenfolge oder eine Zahl zurückgeben möchten. und Sie werden feststellen, dass ich Ihre &HAdditionsroutine ein wenig geändert habe .