Excelで16進数⇔10進数を変換する方法(関数・VBA)
Excelで機器の管理番号やシステムの出力値を扱うと、16進数を10進数へ直す場面があります。単発なら標準関数、定型業務ならVBA、大量データなら一括変換ツールという使い分けが効率的です。「excel 16進数」「16進数 excel」と調べている事務・データ担当者向けに、式とコードを解説します。
Converting hex to decimal in Excel is straightforward with HEX2DEC and DEC2HEX. This guide also covers limits, longer values, VBA conversion, and bulk data.
TL;DR
=HEX2DEC("FF")→ 255=DEC2HEX(255)→ FF- 16進表現は最大10桁。負数は40ビットの2の補数
- VBAでは
CLng("&H" & hexString)とHex(decimalValue)を使う
1. HEX2DECで16進数を10進数へ変換 / Hex to decimal
16進数がA2セルに文字列として入っている場合は =HEX2DEC(A2) と入力します。直接指定する場合は次のとおりです。0x や末尾の h は付けません。
=HEX2DEC("FF") // 255
=HEX2DEC("1A") // 26
=HEX2DEC(A2) // A2の値を変換「excel 16進数 文字列 変換」で注意したいのが先頭の0です。00FF の桁数を残すなら入力列を先に「文字列」にします。ただし変換結果自体は 255 です。
2. DEC2HEXで10進数を16進数へ変換 / Decimal to hex
「16進数 10進数 変換 エクセル」の逆方向には DEC2HEX を使います。第2引数で桁数を指定すると正数の左側を0で埋められます。
=DEC2HEX(255) // "FF"
=DEC2HEX(255, 4) // "00FF"
=DEC2HEX(A2) // A2の値を変換必要な桁数より小さく指定すると #NUM! になります。結果は数値ではなく文字列です。
3. 10桁制限と負の数 / Limits and negative numbers
HEX2DEC が受け取れる16進数は最大10文字です。正数は 0000000000〜7FFFFFFFFF、負数は 8000000000〜FFFFFFFFFF の40ビット2の補数表現です。
=HEX2DEC("7FFFFFFFFF") // 549755813887
=HEX2DEC("FFFFFFFFFF") // -1
=DEC2HEX(-1) // "FFFFFFFFFF"DEC2HEX の入力範囲は -549755813888〜549755813887 です。負数は常に10桁になり、桁数引数は無視されます。外部システムとの照合ではビット幅も確認してください。
4. 10桁を超える16進数 / Longer values
Microsoft 365など動的配列関数が使えるExcelでは、次の式で各桁を数値化し、SUMPRODUCT で桁の重みを合計できます。A2には 0x なしの値を入れます。
=LET(h,UPPER(A2),
d,XMATCH(MID(h,SEQUENCE(LEN(h)),1),
MID("0123456789ABCDEF",SEQUENCE(16),1),0)-1,
SUMPRODUCT(d*16^(LEN(h)-SEQUENCE(LEN(h)))))Excelの数値は有効数字がおおむね15桁なので、巨大な整数は1の位まで正確とは限りません。この式は符号なし正数用です。長いIDや多数の値は Hex Converter での変換が手早いです。
5. VBAで変換する / VBA conversion
VBA 16進数変換では、文字列の先頭に &H を付けて CLng に渡します。逆方向は Hex 関数で文字列にします。
Function HexToDecimal(ByVal hexString As String) As Long
HexToDecimal = CLng("&H" & hexString)
End Function
Function DecimalToHex(ByVal decimalValue As Long) As String
DecimalToHex = Hex(decimalValue)
End Function
Sub ConversionExample()
Range("B2").Value = HexToDecimal(CStr(Range("A2").Value))
Range("D2").Value = DecimalToHex(CLng(Range("C2").Value))
End SubVBAの Long は符号付き32ビット整数なので範囲外ではオーバーフローします。空セルや不正文字のチェックも実運用では追加してください。VB.NET 16進数変換は別環境で、通常は Convert.ToInt64(hexString, 16) と decimalValue.ToString("X") を使います。
6. 複数セルを一括変換 / Bulk conversion
数件なら =HEX2DEC(A2) を下までコピーし、反復する定型処理ならVBAを使います。一度だけ数十〜数百件を処理するなら、関数を1件ずつ整えるよりHex Converterへ列ごと貼り付け、結果をコピーしてExcelへ戻す方が効率的です。
- Excelで変換したいセル範囲をコピーする
- Hex Converterへまとめて貼り付けて変換する
- 結果をコピーし、Excelの別列へ値として貼り付ける
「16進数 10進数 変換方法」を調べながら行う単発作業や、「16進数 10進数 変換ツール」を探している場合に特に便利です。元列を残すと照合ややり直しも簡単です。
English summary
Use =HEX2DEC("FF") to return 255 and =DEC2HEX(255) to return "FF". Both functions use a maximum 10-digit, 40-bit hexadecimal representation; negative values use two's complement. In VBA, use CLng("&H" & hexString) and Hex(decimalValue). For a large one-off list, bulk conversion is often faster than maintaining worksheet formulas.
まとめ / Summary
Excelの変換は HEX2DEC と DEC2HEX で完了します。ただし10桁制限、負数の2の補数、Excelの数値精度には注意が必要です。少数なら関数、反復処理ならVBA、大量の単発データなら一括変換ツールが適します。