この値を含むセルがあります:
0x00006cd2c0306953
そしてそれを数値に変換したいと思います。
私は試した:
=HEX2DEC(C8)
どこ C8
は、16進数の値を含むセルです。
#NUMエラーが発生します。
何が悪いのですか?
あなたは単に使うことができます:
_HEX2DEC(right(A1,(len(A1)-2)))
_
len(A1)
は、_0x
_文字列の長さを示します。 _0x
_の長さを除いて、残りの文字列は16進数です。 Excel関数を使用して、12月を取得します。
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
_になります。
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)
あっ.
以下を試してください:
=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
関数を使用せずにこの変換を実行するための汚い方法の1つ(この Excelフォーラムスレッド を参照)は、この数式を使用して文字列内の各文字の値を計算し、それらを合計することです。これには明らかに、一時的なセルを使用して数を分解することが含まれます。
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
これらの一時セルを行1〜16に配置すると仮定すると、これは、各文字を右から抽出して値に変換し、関連する16の累乗を適用することで機能します。16個のセルをすべて合計して、値を取得します。
HEX番号を持つ列に0xがないことを確認してください。 HEX番号は、0xC8ではなくC8にする必要があります。それが役に立てば幸い。
先頭または末尾に非16進(ABCDEF0123456789)文字がある場合、HEX2DECは失敗します。スペースは表示されないため、実際の地雷です。多くの場合、ログファイル内の文字列として表される16進数には、先頭または末尾にスペースが含まれています。 「= HEX2DEC(TRIM(A1))で通常この問題は解決します。ただし、HEX2DECの10文字の制限により、「= HEX2DEC(RIGHT(TRIM(A1)、10)」のようなものが必要になる場合があります。