Bu değeri içeren bir hücre var:
0x00006cd2c0306953
ve bunu bir sayıya dönüştürmek istiyorum.
Denedim:
=HEX2DEC(C8)
C8
hex değerimi içeren hücre nerede .
#SAYI hatası alıyorum.
Neyi yanlış yapıyorum?
Bu değeri içeren bir hücre var:
0x00006cd2c0306953
ve bunu bir sayıya dönüştürmek istiyorum.
Denedim:
=HEX2DEC(C8)
C8
hex değerimi içeren hücre nerede .
#SAYI hatası alıyorum.
Neyi yanlış yapıyorum?
Yanıtlar:
Sadece şunu kullanabilirsiniz:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
size 0x
ipin uzunluğunu verir . Uzunluğunu hariç tutun, 0x
kalan dize onaltılık sayıdır. Dec almak için Excel işlevini kullanın.
HEX2DEC
fazla on onaltılık basamak kabul eden üç kez ifade edilmiştir . Sorudaki dize 0x00006cd2c0306953
, 18 karakter uzunluğundadır. Çözümünüz değerlendirir RIGHT(A1,(LEN(A1)-2))
; 18−2 16, yani 16 basamak uzunluğunda RIGHT(…)
geri döner 00006cd2c0306953
. Baştaki sıfırları kaldırsanız bile, hala çok fazla olan 12 basamağınız var . Bunu çalıştırabilirseniz, lütfen yapılandırmanızı tanımlayın. (Yani, Excel'in hangi sürümünü kullanıyorsunuz? Ve bunun işe yaramasını sağlamak için zor bir şey yaptınız mı?)
TwiterZX'in belirttiği gibi, Hex2Dec
girişi 10 karakterle ve 6cd2c0306953
12 karakterle sınırlıdır . Yani bu işe yaramayacak ama bunun için kendi fonksiyonumuzu yuvarlayalım. VBA'yı kullanarak bir Modül ekleyin ve aşağıdaki kodu kullanın (ihtiyaçlarınıza göre ayarlanması gerekebilir)
' 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
Excel'de, A1 hücresinin içerdiğini 0x00006cd2c0306953
, A2'nin formülünün =HexadecimalToDecimal(A1)
sonuçlanacağını varsayalım 1.19652E+14
. Sütunu sıfır ondalık basamaklı bir sayıya biçimlendirdiğinizde sonuç olur 119652423330131
.
HEX2DEC 10 karakterle sınırlıdır, ancak bu onu kullanamayacağımız anlamına gelmez. Tek seferde 10 karakteri dönüştürmek ve her kullanım için 2'lik uygun gücü uygulamak için birkaç kez kullanın.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Feragat: Şu anda test edilmemiş]
Daha sonra: Şimdi test etmeye hazır bir e-tablodayım. MID 3,5, 3,6 değiştirin. Hmm .. Hala doğru değil.
HEX2DEC'in işaretli onaltılık değerler üzerinde çalıştığı ortaya çıkıyor, bu nedenle ilk terim negatif oluyor. Neden olduğundan emin değilim, ancak düzeltmek için 2 ^ 40 (veya onaltılık çalıştığımız için 16 ^ 10) ekleyen sabit sürüm:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ancak, bu sadece SAĞ (C8,10) negatif olduğunda işe yarar. İşte benim genel çözümüm:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh.
Bu dönüştürmeyi bir işlev kullanmadan gerçekleştirmenin kirli bir yolu (bunun için bu excel forum iş parçacığına bakın), dizedeki her karakterin değerini hesaplamak ve sonra bunları toplamak için bu formülü kullanmaktır. Bu açıkça sayıyı ayrıştırmak için geçici hücrelerin kullanılmasını içerir:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Bu geçici hücreleri 1 ila 16 arasındaki satırlara yerleştirdiğinizi varsayarsak, bu, her karakteri sağdan başlayarak, bir değere dönüştürerek ve sonra 16'nın ilgili gücünü uygulayarak çıkarır. Değerinizi elde etmek için 16 hücreyi toplayın.
16^(ROW() - 1)
çok daha temiz ve okunması daha kolayPOWER()
HEX numaralarına sahip sütununuzda 0x olmadığından emin olun. HEX numarası 0xC8 değil C8 olmalıdır. Umarım yardımcı olur.
HEX2DEC, onaltılı veya sondaki altıgen olmayan (ABCDEF0123456789) karakterler varsa başarısız olur. Alanlar gerçek bir mayındır çünkü görünmezler. Günlük dosyalarında dizeler olarak gösterilen onaltılı sayılar genellikle önde gelen ve / veya sondaki boşlukları içerir. "= HEX2DEC (TRIM (A1)) genellikle bu sorunu çözecektir. Ancak, HEX2DEC'in 10 karakter sınırlaması nedeniyle" = HEX2DEC (SAĞ (TRIM (A1), 10)) gibi bir şey gerekli olabilir.
Bu işlev değişti kullanmayı deneyin
=HEXDEC(C8)
yani HEX & DEC arasında 2 numara olmadan
,
veya ;
burada bir işlev ayırıcı bile yok