Excelで16進数を10進数に変換するにはどうすればよいですか?


11

この値を含むセルがあります:

0x00006cd2c0306953

それを数値に変換したいです。

私は試した:

=HEX2DEC(C8)

C816進値を含むセルはどこですか。

#NUMエラーが表示されます。

私は何を間違えていますか?


私によればCは資本ではなく、小さいかもしれません。'c8'を試してください
Sandy8086

7
@ Sandy8086:Excelはセルのインデックスの大文字小文字を区別しません
ネイサンフェルマン

回答:


5

単に使用できます:

HEX2DEC(right(A1,(len(A1)-2)))

len(A1)0x文字列の長さを示します。の長さを除外し0x、残りの文字列は16進数です。Excel関数を使用して、decを取得します。


これを試しましたか?このページで何か読んだことがありますか?HEX2DEC最大10桁の16進数を受け入れることが3回述べられています。質問の文字列は、0x00006cd2c030695318文字です。ソリューションが評価しRIGHT(A1,(LEN(A1)-2))ます。18-2は16なので、16桁のをRIGHT(…)返します00006cd2c0306953。先行ゼロを取り除いても、12桁ありますが、それでも多すぎます。これを機能させることができる場合は、構成を説明してください。(つまり、どのバージョンのExcelを使用していますか?そして、これを機能させるために何かトリッキーなことをしましたか?)
スコット

4

TwiterZXが示したように、Hex2Decの入力は10文字に制限されており、6cd2c030695312文字です。それではうまくいきませんが、そのための独自の関数をロールしてみましょう。VBAを使用して、モジュールを追加し、次のコードを使用します(ニーズに基づいて調整する必要がある場合があります)

' 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では、セルA1にが含まれ0x00006cd2c0306953、A2の数式は=HexadecimalToDecimal(A1)になり1.19652E+14ます。列を小数点以下がゼロの数値にフォーマットすると、結果はになります119652423330131


3

HEX2DECは10文字に制限されていますが、それが使用できないという意味ではありません。一度に10文字を変換し、各使用に2の適切な累乗を適用するために、それを数回使用します。

= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)

[免責事項:現在テストされていません]

後で:今、スプレッドシートでテストする準備ができています。MIDの3,5を3,6に変更します。うーん..まだ正しくありません。

HEX2DECは符号付き16進数値で動作しているため、最初の項は負の値になります。理由はわかりませんが、修正するために2 ^ 40(または16進数で作業している場合は16 ^ 10)を追加する修正バージョンがあります。

= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)

ただし、RIGHT(C8,10)が負の場合にのみ機能します。私の一般的な解決策は次のとおりです。

= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)

うん


1
符号ビットは40番目のビットだけなので、64ビット値を2つの32ビット値に分割するだけで、常に正の値になります。16進文字列にそれ以外のパッドゼロを、それが37ビットよりも短いかどう
phuclv

2

関数を使用せずにこの変換を実行する1つの汚い方法(このExcelフォーラムスレッドを参照)は、この式を使用して文字列内の各文字の値を計算し、それらを合計することです。これは明らかに、一時的なセルを使用して数値を分解することを伴います。

=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)

これらの一時セルを1行目から16行目に配置すると仮定すると、これは各文字を右から抽出し、それを値に変換してから、関連する16の累乗を適用することにより機能します。


1
私見16^(ROW() - 1)ははるかにきれいで読みやすいPOWER()
-phuclv

2

以下を試してください:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)

なぜ使用しないの2^32ですか?
phuclv

0

HEX番号のある列に0xがないことを確認してください。HEX番号は0xC8ではなくC8である必要があります。それが役に立てば幸い。


0

先頭または末尾に非16進数(ABCDEF0123456789)文字がある場合、HEX2DECは失敗します。スペースは目に見えないため、本当の地雷です。多くの場合、ログファイル内の文字列として表される16進数には、先頭または末尾のスペースが含まれます。「= HEX2DEC(TRIM(A1))は通常この問題を解決します。ただし、HEX2DECの10文字の制限により、「= HEX2DEC(RIGHT(TRIM(A1)、10)」のようなものが必要になる場合があります。


-2

この関数は変更されました

=HEXDEC(C8)

16進数と12進数の間に2番なし


1
これはまったく機能しません
ネイサンフェルマン

この関数は言語に依存していると思います。Excelアプリのメイン言語は何ですか?バージョンは?
リヤドクリム

Office 2010の英語
ネイサンフェルマン

4
HEX2DEC(またはHEXDEC)関数は、40ビット(10文字)に制限され、そして、あなたの数は12文字です office.microsoft.com/en-us/excel-help/...
リヤドクリム

この言語はどのように依存していますか?,または;ここのような関数区切り記号もありません
-phuclv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.