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") を使います。
複数セルをまとめて処理し、不正な値はエラーにせず「invalid」と表示したい場合は、ループとエラー処理を組み合わせます。
Sub ConvertRangeHexToDecimal()
Dim cell As Range
For Each cell In Selection
If cell.Value <> "" Then
On Error Resume Next
Err.Clear
cell.Offset(0, 1).Value = CLng("&H" & cell.Value)
If Err.Number <> 0 Then cell.Offset(0, 1).Value = "invalid"
On Error GoTo 0
End If
Next cell
End Sub変換したい16進数のセル範囲を選択してこのマクロを実行すると、隣列に10進値(または不正値の場合は"invalid")が一括入力されます。
6. 複数セルを一括変換 / Bulk conversion
数件なら =HEX2DEC(A2) を下までコピーし、反復する定型処理ならVBAを使います。一度だけ数十〜数百件を処理するなら、関数を1件ずつ整えるよりHex Converterへ列ごと貼り付け、結果をコピーしてExcelへ戻す方が効率的です。
- Excelで変換したいセル範囲をコピーする
- Hex Converterへまとめて貼り付けて変換する
- 結果をコピーし、Excelの別列へ値として貼り付ける
「16進数 10進数 変換方法」を調べながら行う単発作業や、「16進数 10進数 変換ツール」を探している場合に特に便利です。元列を残すと照合ややり直しも簡単です。
7. Excelのバージョンと互換性 / Version compatibility
HEX2DEC・DEC2HEXはExcel 2007以降は標準搭載の関数です。それより古いExcel 2003以前では 「アナリシス ツールパック」アドインの読み込みが必要でした。Googleスプレッドシートにも同名・同仕様の関数があるため、 共有ファイルでもそのまま使えます。
8. よくあるエラーと対処 / Common errors and fixes
| 症状 / Symptom | 原因 / Cause | 対処 / Fix |
|---|---|---|
=HEX2DEC("0xFF") が #NUM! | 0x接頭辞のxは16進文字ではないため無効な入力扱い | 0xを除いて"FF"のみを渡す |
11桁以上の値で#NUM! | HEX2DECは10文字(40bit)までしか受け付けない | 桁数を確認し、収まらない場合はHex Converter等の64bit対応ツールを使う |
=DEC2HEX(255, 1) が #NUM! | 指定した桁数が実際に必要な桁数より小さい | 桁数引数は0埋め用なので、必要最小桁数以上を指定する |
| 変換結果が数式や関数で使えない | DEC2HEXの戻り値は文字列であり数値ではない | 数値として扱うならVALUE関数などで明示的に変換する |
9. 実例:機器ステータスの一覧を変換する / Example: device status log
機器から出力されたステータスレジスタの値(16進数)を一覧化し、レポート用に10進数へ変換する例です。 A列に元の16進値、B列に変換式を並べます。
A列(元データ) B列(変換式と結果)
1F =HEX2DEC(A2) → 31
A2 =HEX2DEC(A3) → 162
FF00 =HEX2DEC(A4) → 65280
// 逆に、10進の閾値をログと同じ4桁16進表記へ揃えたい場合
=DEC2HEX(4000, 4) // "0FA0"元列を残したまま変換列を追加すると、後から桁数や表記ルールの認識違いに気づいた際も照合が容易です。
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、大量の単発データなら一括変換ツールが適します。
よくある質問 / FAQ
- Excelで16進数を10進数に変換する関数は何ですか?
- HEX2DEC関数です。=HEX2DEC("FF") で 255 が得られます。逆は =DEC2HEX(255) で FF になります。0x や末尾の h は付けません。
- HEX2DECで扱える桁数に制限はありますか?
- 16進表現は最大10桁までです。負数は40ビットの2の補数として扱われます。
- VBAで16進数を変換するにはどう書きますか?
- 16進数から10進数へは CLng("&H" & hexString)、10進数から16進数へは Hex(decimalValue) を使います。
- 先頭が0の16進数がうまく扱えません
- セルの値が数値として解釈され、先頭の0が失われている可能性があります。16進数は文字列として入力してください。