web-dev-qa-db-ja.com

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

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

0x00006cd2c0306953

そしてそれを数値に変換したいと思います。

私は試した:

=HEX2DEC(C8)

どこ C8は、16進数の値を含むセルです。

#NUMエラーが発生します。

何が悪いのですか?

11
Nathan Fellman

あなたは単に使うことができます:

_HEX2DEC(right(A1,(len(A1)-2)))
_

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

5
vegeta

TwiterZXが示すように、_Hex2Dec_の入力は10文字に制限され、_6cd2c0306953_は12文字です。だからそれはうまくいきませんが、そのために私たち自身の関数をロールしましょう。 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_になります。列を10進ゼロの数値にフォーマットすると、結果は_119652423330131_になります。

4
zedfoxus

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)

あっ.

3
Bill Nace

以下を試してください:

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

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

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

これらの一時セルを行1〜16に配置すると仮定すると、これは、各文字を右から抽出して値に変換し、関連する16の累乗を適用することで機能します。16個のセルをすべて合計して、値を取得します。

2

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

0
user2794645

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

0