1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EXCEL】Unicodeから文字を表示する関数

1
Posted at

やること

【Excel】Unicodeを表示する関数 #VBA - Qiitaで文字→Unicodeの関数を用意したが、逆がなかったのでCopilot先生に作成してもらう。

作成された関数

UnicodePointToChar
'------------------------------------------------------------------
' 関数   : UnicodePointToChar
' 説明   : "U+4E00" または "4E00" のような Unicode コードポイント表記から
'          実際の文字(漢字など)を生成して返す。
' 引数   : codePoint - "U+XXXX" または "XXXX" の形式の16進コード
' 戻り値 : 対応する1文字(例: "U+4E00" → "一")
' 使用例 : =UnicodePointToChar("U+4E00") → "一"
'          =UnicodePointToChar("4E8C")   → "二"
'------------------------------------------------------------------
Function UnicodePointToChar(codePoint As String) As String
    Dim hexStr As String
    Dim code As Long
    
    ' "U+" が付いている場合は取り除く
    hexStr = Replace(UCase(codePoint), "U+", "")
    
    ' 16進 → 数値
    If Len(hexStr) > 0 Then
        code = CLng("&H" & hexStr)
        UnicodePointToChar = ChrW(code)
    Else
        UnicodePointToChar = ""
    End If
End Function

【Excel】Unicodeを表示する関数 #VBA - Qiitaにコメント追加。

GetUnicodeChar
'------------------------------------------------------------------
' 関数   : GetUnicodeChar
' 説明   : セル内の1文字を Unicode コードポイント (U+XXXX) 形式で返す。
' 引数   : Cell - 対象セル(1文字のみを想定)
' 戻り値 : "U+4E00" のような Unicode コードポイント文字列
' 使用例 : =GetUnicodeChar(A1)   (A1 が "一" の場合 → "U+4E00")
'------------------------------------------------------------------
Function GetUnicodeChar(Cell As Range) As String
    Dim ch As String
    Dim code As Long
    ch = Cell.Value
    If Len(ch) > 0 Then
        code = AscW(ch)
        GetUnicodeChar = "U+" & Hex(code)
    Else
        GetUnicodeChar = ""
    End If
End Function

背景

ニュース |『涼宮ハルヒの御礼』公式サイト
image.png
これの一部をコピペすると、以下の通り。
image.png
上記の関数で「⽉」のコードを調べる。(「⽓」は参考)
image.png
→「U+2F49」は「康熙部首」

UTF8 3byte (e2)
image.png

漢字のようで漢字でないUnicodeの「康熙部首」と「CJK部首補助」|TechRacho by BPS株式会社

おまけ

image.png
とりあえず、簡易的な UTF-8<->文字 の関数も作成してもらう。

UTF-8->文字

Utf8HexToString
''------------------------------------------------------------------
'' 関数   : HexToUtf8Text
'' 説明   : スペース区切りの UTF-8 16進バイト列を Unicode 文字列に変換する。
''          例: "E3 81 82" → "あ"
'' 引数   : hexString - "E3 81 82" のようなスペース区切りの16進バイト列
'' 戻り値 : UTF-8 として解釈した文字列
'' 使用例 : =HexToUtf8Text("E3 81 82")   → "あ"
'' 注記   : StrConv を使う簡易版(UTF-8 として正しく解釈しない場合がある)
''        : Windows の内部コードページに依存する
''        : ※「バイト列 → Unicode」変換を Windows の現在のコードページ
''        :  (ANSI コードページ)に従って行う
''        :  -> ASCII(0x00~0x7F)だけのデータだけ可能
''------------------------------------------------------------------
'Function HexToUtf8Text(hexString As String) As String
'    Dim bytes() As Byte
'    Dim hexParts() As String
'    Dim i As Long
'
'    hexParts = Split(hexString, " ")
'    ReDim bytes(UBound(hexParts))
'
'    For i = 0 To UBound(hexParts)
'        bytes(i) = CByte("&H" & hexParts(i))
'    Next i
'
'    HexToUtf8Text = StrConv(bytes, vbUnicode)
'End Function
'------------------------------------------------------------------
' 関数   : Utf8HexToString
' 説明   : UTF-8 の16進バイト列を ADODB.Stream を使って Unicode 文字列に変換する。
'          HexToUtf8Text よりも UTF-8 の扱いが正確で、複数文字にも強い。
' 引数   : hexText - "E3 81 82 E3 81 84" のようなスペース区切りの16進バイト列
' 戻り値 : UTF-8 としてデコードされた文字列
' 使用例 : =Utf8HexToString("E3 81 82 E3 81 84") → "あい"
' 注記   : ADODB.Stream を使う
'        : Excel の内部コードページに依存しない
'------------------------------------------------------------------
Function Utf8HexToString(hexText As String) As String
    Dim bytes() As Byte
    Dim arr() As String
    Dim i As Long
    
    ' スペース区切りを配列に
    arr = Split(hexText, " ")
    ReDim bytes(UBound(arr))
    
    ' 16進 → Byte
    For i = 0 To UBound(arr)
        bytes(i) = CByte("&H" & arr(i))
    Next i
    
    ' ADODB.Stream を使って UTF-8 → Unicode 変換
    Dim stm As Object
    Set stm = CreateObject("ADODB.Stream")
    
    stm.Type = 1 'binary
    stm.Open
    stm.Write bytes
    stm.Position = 0
    stm.Type = 2 'text
    stm.Charset = "UTF-8"
    
    Utf8HexToString = stm.ReadText
    stm.Close
End Function

文字->UTF-8

StringToUtf8Hex
'------------------------------------------------------------------
' 関数   : StringToUtf8Hex
' 説明   : 文字列を UTF-8 でエンコードし、スペース区切りの16進バイト列に変換する。
'          例: "あ" → "E3 81 82"
' 引数   : text - UTF-8 に変換したい文字列(1文字でも複数文字でも可)
' 戻り値 : UTF-8 の16進バイト列(スペース区切り)
' 使用例 : =StringToUtf8Hex("あ") → "E3 81 82"
'        : ※ADODB.Stream(Charset="UTF-8")は UTF-8 BOM(EF BB BF) を
'        :   必ず付けるため、除去する
'------------------------------------------------------------------
Function StringToUtf8Hex(text As String) As String
    Dim stm As Object
    Dim bytes() As Byte
    Dim i As Long
    Dim startIndex As Long
    Dim result As String
    
    ' UTF-8 で書き込み
    Set stm = CreateObject("ADODB.Stream")
    stm.Type = 2 'text
    stm.Charset = "UTF-8"
    stm.Open
    stm.WriteText text
    stm.Position = 0
    stm.Type = 1 'binary
    
    bytes = stm.Read
    stm.Close
    
    '--------------------------------------------
    ' UTF-8 BOM (EF BB BF) が付いている場合は除去
    '--------------------------------------------
    If UBound(bytes) >= 2 Then
        If bytes(0) = &HEF And bytes(1) = &HBB And bytes(2) = &HBF Then
            startIndex = 3   'BOM の3バイトをスキップ
        Else
            startIndex = 0
        End If
    Else
        startIndex = 0
    End If
    
    ' バイト列を16進文字列に変換
    For i = startIndex To UBound(bytes)
        result = result & Right("0" & Hex(bytes(i)), 2)
        If i < UBound(bytes) Then result = result & " "
    Next i
    
    StringToUtf8Hex = result
End Function

補足:Qiitaでの記事

 以下の検索をしたところ、248件ヒットした。(2026/03/22時点)
  「Excel 文字コード UTF-8 Unicode」の検索結果 - Qiita

 以下、適当に紹介:bow_tone1:

文字コード

unicodeとは?文字コードとは?UTF-8とは? #Python - Qiita
最終更新日 2019年12月06日 投稿日 2018年10月14日

文字コードとは何か? #初心者 - Qiita
最終更新日 2024年10月01日 投稿日 2024年04月04日

文字コードとは #Excel関数 - Qiita
投稿日 2024年01月31日

「文字化け」のナゾを解く!文字コードとUTF-8を素人でもわかるように解説 #初心者 - Qiita
最終更新日 2025年12月10日 投稿日 2025年12月10日

文字コードについて、バイナリを眺めながら入門 #文字コード - Qiita
最終更新日 2020年12月29日 投稿日 2020年12月25日

文字コードとバイト数を完全整理|UTF-8・Shift-JIS・半角カナの落とし穴まで #初心者向け - Qiita
投稿日 2026年03月09日

文字コードで躓いた話 #初心者 - Qiita
最終更新日 2022年12月16日 投稿日 2022年12月16日

【社内勉強会】Web開発者に知ってほしい「文字コード」の話(2017/04/19) #勉強会 - Qiita
最終更新日 2017年07月05日 投稿日 2017年04月18日

Shift-JIS, UTF-8をC言語で扱うために文字コードについて調べた #Unicode - Qiita
最終更新日 2019年11月24日 投稿日 2019年11月24日

[備忘録] PowerShell 5.1 日本語環境の文字コード #Windows - Qiita
投稿日 2025年06月04日

BOM

UTF-8 BOMについて #bom - Qiita
最終更新日 2021年02月19日 投稿日 2021年02月15日

UTF-8 テキストファイルを BOM 付へ変換(シェルスクリプト) #ShellScript - Qiita
最終更新日 2025年02月14日 投稿日 2019年12月04日

テキストファイルのBOM(Byte Order Mark)とは #CSV - Qiita
投稿日 2022年01月30日

CSVファイルをExcelで開くときの文字化け対策「BOM」って? #bom - Qiita
最終更新日 2021年07月07日 投稿日 2021年07月07日

UnicodeとBOM #.NET - Qiita
投稿日 2022年11月09日

PythonでUTF-8 with BOMを開く #Python - Qiita
最終更新日 2023年04月19日 投稿日 2014年03月28日

BOMを削除する方法(UTF-8) #Java - Qiita
最終更新日 2020年01月29日
投稿日 2020年01月26日

CSVファイルをExcelで文字化けさせないために知っておくこと(エンコードとBOM) #Python - Qiita
投稿日 2024年01月17日

ツール/EXCEL tips

[VBA]ExcelでUTF-8とUTF-16LEの絵文字💖、異体字辻󠄀、サロゲートペア𠮷の番号を求める #emoji - Qiita
最終更新日 2023年02月20日 投稿日 2023年02月20日

VBAで絵文字💖 #Excel - Qiita
最終更新日 2017年12月12日 投稿日 2017年12月12日

VBAで様々な文字コードのテキストを読込めるクラスを作った(Win限定?) #Excel - Qiita
最終更新日 2021年03月26日 投稿日 2021年02月11日

Excel VBA Excel 2013 Later セルに入っている文字のコードを UTF-16LE UTF-8 EUC-jp Shift-Jisに変換してイミディエイトに出力する #Unicode - Qiita
最終更新日 2020年11月29日 投稿日 2020年11月27日

Excel for Microsoft 365 VBA Win32Apiとスピルを使いすべての文字のUTF-16 UTF-8 SJisの文字コードを取得する #Win32API - Qiita
最終更新日 2020年11月22日 投稿日 2020年11月22日

Excel VBA UTF-8 Decode セルの文字をUTF-8の16進コードポイントに分解する #Unicode - Qiita
投稿日 2023年02月23日

VBScript/VBAで UTF-8を 自分で解読する関数 #vbs - Qiita
投稿日 2021年12月25日

VBAで Windows APIを使った UTF-8 ←→Unicode相互変換 #Excel - Qiita
最終更新日 2018年05月30日 投稿日 2018年05月30日

Powershellでファイルの文字コードを変換 #PowerShell - Qiita
最終更新日 2018年05月23日 投稿日 2016年11月06日

UTF-8のCSVを文字化けしないでExcelで開く方法 (手動) #Excel - Qiita
最終更新日 2021年12月26日 投稿日 2021年12月26日

Excelから保存したUnicodeテキストを読み込む #PHP - Qiita
最終更新日 2016年02月11日 投稿日 2016年02月11日

Office 2016 for MacのVBAでUTF-8テキストファイルを出力する #Excel - Qiita
最終更新日 2020年10月06日 投稿日 2018年04月25日

サービスからダウンロードできる CSV ファイルを Excel で文字化けさせない #Excel - Qiita
投稿日 2018年08月30日

 とりあえず、ここまで。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?