この値を含むセルがあります:
0x00006cd2c0306953
それを数値に変換したいです。
私は試した:
=HEX2DEC(C8)
C8
16進値を含むセルはどこですか。
#NUMエラーが表示されます。
私は何を間違えていますか?
この値を含むセルがあります:
0x00006cd2c0306953
それを数値に変換したいです。
私は試した:
=HEX2DEC(C8)
C8
16進値を含むセルはどこですか。
#NUMエラーが表示されます。
私は何を間違えていますか?
回答:
単に使用できます:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
0x
文字列の長さを示します。の長さを除外し0x
、残りの文字列は16進数です。Excel関数を使用して、decを取得します。
HEX2DEC
最大10桁の16進数を受け入れることが3回述べられています。質問の文字列は、0x00006cd2c0306953
18文字です。ソリューションが評価しRIGHT(A1,(LEN(A1)-2))
ます。18-2は16なので、16桁のをRIGHT(…)
返します00006cd2c0306953
。先行ゼロを取り除いても、12桁ありますが、それでも多すぎます。これを機能させることができる場合は、構成を説明してください。(つまり、どのバージョンのExcelを使用していますか?そして、これを機能させるために何かトリッキーなことをしましたか?)
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
ます。列を小数点以下がゼロの数値にフォーマットすると、結果はになります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)
うん
関数を使用せずにこの変換を実行する1つの汚い方法(このExcelフォーラムスレッドを参照)は、この式を使用して文字列内の各文字の値を計算し、それらを合計することです。これは明らかに、一時的なセルを使用して数値を分解することを伴います。
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
これらの一時セルを1行目から16行目に配置すると仮定すると、これは各文字を右から抽出し、それを値に変換してから、関連する16の累乗を適用することにより機能します。
16^(ROW() - 1)
ははるかにきれいで読みやすいPOWER()
HEX番号のある列に0xがないことを確認してください。HEX番号は0xC8ではなくC8である必要があります。それが役に立てば幸い。
先頭または末尾に非16進数(ABCDEF0123456789)文字がある場合、HEX2DECは失敗します。スペースは目に見えないため、本当の地雷です。多くの場合、ログファイル内の文字列として表される16進数には、先頭または末尾のスペースが含まれます。「= HEX2DEC(TRIM(A1))は通常この問題を解決します。ただし、HEX2DECの10文字の制限により、「= HEX2DEC(RIGHT(TRIM(A1)、10)」のようなものが必要になる場合があります。
この関数は変更されました
=HEXDEC(C8)
16進数と12進数の間に2番なし
,
または;
ここのような関数区切り記号もありません