J'ai une cellule contenant cette valeur:
0x00006cd2c0306953
et je veux le convertir en un nombre.
J'ai essayé:
=HEX2DEC(C8)
où C8
est la cellule contenant ma valeur hexadécimale.
J'obtiens une erreur #NUM.
Qu'est-ce que je fais mal?
J'ai une cellule contenant cette valeur:
0x00006cd2c0306953
et je veux le convertir en un nombre.
J'ai essayé:
=HEX2DEC(C8)
où C8
est la cellule contenant ma valeur hexadécimale.
J'obtiens une erreur #NUM.
Qu'est-ce que je fais mal?
Réponses:
Vous pouvez simplement utiliser:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
vous donne la longueur de la 0x
chaîne. Exclure la longueur de 0x
, la chaîne restante est le nombre hexadécimal. Utilisez la fonction Excel pour obtenir la déc.
HEX2DEC
accepte un maximum de dix chiffres hexadécimaux. La chaîne dans la question 0x00006cd2c0306953
, est de 18 caractères. Votre solution évalue RIGHT(A1,(LEN(A1)-2))
; 18−2 est 16, donc RIGHT(…)
retourne 00006cd2c0306953
, qui est long de 16 chiffres. Même si vous supprimez les zéros de tête, vous avez 12 chiffres, ce qui est encore trop. Si vous pouvez le faire fonctionner, veuillez décrire votre configuration. (C'est-à-dire, quelle version d'Excel utilisez-vous? Et avez-vous fait quelque chose de délicat pour que cela fonctionne?)
Comme TwiterZX l'a indiqué, Hex2Dec
la saisie de est limitée à 10 caractères et à 6cd2c0306953
12 caractères. Donc ça ne marchera pas mais roulons notre propre fonction pour ça. À l'aide de VBA, ajoutez un module et utilisez le code suivant (peut-être besoin d'être ajusté en fonction de vos besoins)
' 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
Dans Excel, disons que la cellule A1 contient 0x00006cd2c0306953
, la formule de A2 =HexadecimalToDecimal(A1)
entraînera 1.19652E+14
. Formatez la colonne en un nombre avec zéro décimale et le résultat sera 119652423330131
.
HEX2DEC est limité à 10 caractères, mais cela ne signifie pas que nous ne pouvons pas l'utiliser. Utilisez-le simplement plusieurs fois, pour convertir 10 caractères à la fois et appliquez la puissance appropriée de 2 à chaque utilisation.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Avertissement: non testé pour le moment]
Plus tard: je suis maintenant dans une feuille de calcul, prêt à tester. Changez le 3,5 dans MID en 3,6. Hmm .. Toujours pas bien.
Il s'avère que le HEX2DEC travaille sur des valeurs hexadécimales signées, donc le premier terme finit par être négatif. Je ne sais pas pourquoi, mais voici la version fixe qui ajoute 2 ^ 40 (ou 16 ^ 10, car nous travaillons en hexadécimal) pour corriger:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Cependant, cela ne fonctionne que si le DROIT (C8,10) se trouve être négatif. Voici ma solution générale:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh.
Une mauvaise façon d'effectuer cette conversion, sans utiliser de fonction (voir ce fil de discussion Excel pour cela) est d'utiliser cette formule pour calculer la valeur de chaque caractère de la chaîne, puis de les résumer. Cela implique évidemment d'utiliser des cellules temporaires pour décomposer le nombre:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
En supposant que vous placez ces cellules temporaires sur les lignes 1 à 16, cela fonctionne en extrayant chaque caractère, en partant de la droite, en le convertissant en une valeur, puis en appliquant la puissance appropriée de 16. Additionnez les 16 cellules afin d'obtenir votre valeur.
16^(ROW() - 1)
est beaucoup plus propre et plus facile à lire quePOWER()
Assurez-vous que votre colonne qui a des numéros HEX n'a pas 0x. Le numéro HEX doit être C8, pas 0xC8. J'espère que cela aide.
HEX2DEC échoue s'il y a des caractères non hexadécimaux de début ou de fin (ABCDEF0123456789). Les espaces sont une véritable mine car ils ne sont pas visibles. Les nombres hexadécimaux, représentés sous forme de chaînes, contiennent souvent des espaces de début et / ou de fin. Je trouve que "= HEX2DEC (TRIM (A1)) résout généralement ce problème. Cependant, quelque chose comme" = HEX2DEC (RIGHT (TRIM (A1), 10)) peut être nécessaire en raison de la limitation à 10 caractères de HEX2DEC.
Cette fonction a changé, essayez d'utiliser
=HEXDEC(C8)
donc sans numéro 2 entre HEX & DEC
,
ou ;
ici