Mam komórkę zawierającą tę wartość:
0x00006cd2c0306953
i chcę przekonwertować go na liczbę.
Próbowałem:
=HEX2DEC(C8)
gdzie C8
jest komórka zawierająca moją wartość szesnastkową.
Otrzymuję błąd # LICZBA.
Co ja robię źle?
Mam komórkę zawierającą tę wartość:
0x00006cd2c0306953
i chcę przekonwertować go na liczbę.
Próbowałem:
=HEX2DEC(C8)
gdzie C8
jest komórka zawierająca moją wartość szesnastkową.
Otrzymuję błąd # LICZBA.
Co ja robię źle?
Odpowiedzi:
Możesz po prostu użyć:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
daje ci długość 0x
sznurka. Wyklucz długość 0x
, pozostały ciąg to liczba szesnastkowa. Użyj funkcji Excela, aby uzyskać dec.
HEX2DEC
akceptuje maksymalnie dziesięć cyfr szesnastkowych. Ciąg w pytaniu 0x00006cd2c0306953
ma 18 znaków. Twoje rozwiązanie ocenia RIGHT(A1,(LEN(A1)-2))
; 18-2 to 16, więc RIGHT(…)
zwraca 00006cd2c0306953
16 cyfr. Nawet jeśli usuniesz początkowe zera, masz 12 cyfr, co wciąż jest zbyt wiele. Jeśli możesz to zrobić, opisz swoją konfigurację. (Tj. Jakiej wersji programu Excel używasz? Czy zrobiłeś coś trudnego, aby to zadziałało?)
Jak wskazał TwiterZX, Hex2Dec
dane wejściowe są ograniczone do 10 znaków i 6cd2c0306953
12 znaków. To nie zadziała, ale uruchommy do tego naszą własną funkcję. Za pomocą VBA dodaj moduł i użyj następującego kodu (może wymagać dostosowania w zależności od potrzeb)
' 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
W Excelu, powiedzmy, komórka A1 zawiera 0x00006cd2c0306953
, formuła A2 =HexadecimalToDecimal(A1)
spowoduje 1.19652E+14
. Sformatuj kolumnę na liczbę z zerowymi miejscami po przecinku, a wynikiem będzie 119652423330131
.
HEX2DEC jest ograniczony do 10 znaków, ale to nie znaczy, że nie możemy go użyć. Po prostu użyj go kilka razy, aby przekonwertować 10 znaków na raz i zastosować odpowiednią moc 2 do każdego użycia.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Uwaga: W tej chwili niesprawdzone]
Później: jestem teraz w arkuszu kalkulacyjnym, gotowy do przetestowania. Zmień 3,5 w MID na 3,6. Hmm .. Nadal nie tak.
Okazuje się, że HEX2DEC pracuje na podpisanych wartościach szesnastkowych, więc pierwszy termin jest ujemny. Nie jestem pewien, dlaczego, ale oto stała wersja, która dodaje 2 ^ 40 (lub 16 ^ 10, ponieważ pracujemy w trybie szesnastkowym), aby naprawić:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Działa to jednak tylko wtedy, gdy PRAWO (C8,10) okazuje się być ujemne. Oto moje ogólne rozwiązanie:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh.
Jednym brudnym sposobem na wykonanie tej konwersji bez użycia funkcji (zobacz ten wątek forum programu Excel w tym celu) jest użycie tej formuły do obliczenia wartości każdego znaku w ciągu, a następnie zsumowanie ich. Obejmuje to oczywiście użycie tymczasowych komórek do rozłożenia liczby:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Zakładając, że umieścisz te komórki tymczasowe w rzędach od 1 do 16, działa to poprzez wyodrębnienie każdego znaku, zaczynając od prawej strony, przekształcając go w wartość, a następnie stosując odpowiednią moc 16. Zsumuj wszystkie 16 komórek, aby uzyskać wartość.
16^(ROW() - 1)
jest znacznie czystszy i łatwiejszy do odczytania niżPOWER()
Upewnij się, że kolumna z numerami HEX nie ma 0x. Numer HEX powinien wynosić C8, a nie 0xC8. Mam nadzieję, że to pomoże.
HEX2DEC kończy się niepowodzeniem, jeśli są jakieś wiodące lub końcowe nie-szesnastkowe znaki (ABCDEF0123456789). Przestrzenie są prawdziwą miną, ponieważ nie są widoczne. Często liczby szesnastkowe, reprezentowane jako ciągi znaków, w plikach dziennika zawierają początkowe i / lub końcowe spacje. Uważam, że „= HEX2DEC (TRIM (A1)) zazwyczaj rozwiązuje ten problem. Jednak coś w rodzaju„ = HEX2DEC (PRAWY (TRIM (A1), 10), może być konieczne ze względu na ograniczenie 10 znaków w HEX2DEC.
Ta funkcja uległa zmianie. Spróbuj użyć
=HEXDEC(C8)
więc bez numeru 2 między HEX i DEC
,
lub ;
tutaj