はじめに
「\u3042\u3044\u3046\u3048\u304a」の様なUnicodeエスケープシーケンスへエンコードされた文字列をVBAマクロで変換(デコード)する方法を記載します。
オンラインで変換(デコード)してくれるサイトはよくありますが、ローカルで変換(デコード)する必要があったのでマクロでやることにしました。
UnicodeエスケープシーケンスをデコードするVBAマクロ
Excelを開き、Alt + F11を押して以下ソースを貼り付けます。
Function uniDecode(ByVal strWk As String) As String
On Error GoTo Err_uniDecode:
uniDecode = ""
Dim digit4 As Integer
digit4 = 4 'Unicode Escape Sequenceは4桁
Dim i As Integer
uniFlg = False
'1文字ずつ処理
For i = 1 To Len(strWk)
If (uniFlg = False) And (Mid(strWk, i, 1) = "\") Then
i = i + 1
'\uの場合
If Mid(strWk, i, 1) = "u" Then
i = i + 1
uniFlg = True
Else
i = i - 1
uniFlg = False
End If
End If
If uniFlg Then
'4バイト分を16進変換
uniDecode = uniDecode & ChrW("&H" & Mid(strWk, i, digit4))
i = i + 3
uniFlg = False
Else
'Unicodeでない場合
uniDecode = uniDecode & Mid(strWk, i, 1)
End If
Next i
Exit Function
Err_uniDecode:
uniDecode = "uniDecodeエラーが発生しました"
End Function
応用編
A列のUnicodeエスケープシーケンスをデコードした結果をB列へ設定するマクロを作成しました。
上記uniDecodeファンクションを利用して2行目から4行目まで変換していきます。
Sub convUni()
For i = 2 To 4
Cells(i, 2).Value = uniDecode(Cells(i, 1).Value)
Next i
End Sub
上手く変換できました✌
Unicodeエスケープシーケンスとは?
Unicodeエスケープシーケンスは、Unicode文字を表現するための特殊なエスケープ形式です。通常、プログラミング言語やテキストエディタなどで、Unicode文字を直接入力することが難しい場合や不可能な場合に使用されます。
Unicodeエスケープシーケンスはバックスラッシュ(\)に続く特定の形式を取ります。一般的な形式は\uXXXXです。ここで、XXXXは4桁の16進数で、Unicodeコードポイントを表します。例えば、文字’あ’のUnicodeコードポイントはU+3042であり、これをUnicodeエスケープシーケンスで表すと\u3042となります。
また、拡張されたUnicodeエスケープシーケンスとして、8桁の形式\UXXXXXXXXもあります。こちらは32ビットのUnicodeコードポイントを表現します。
Unicodeエスケープシーケンスは、プログラムのソースコードや文字列リテラル内で使用され、Unicode文字を含むテキストを表現するために利用されます。例えば、プログラム内で日本語や他の非ASCII文字を使用する場合、Unicodeエスケープシーケンスを使ってこれらの文字を表現することができます。
まとめ
テキストに含まれるマルチバイト文字を6桁のUnicodeエスケープシーケンスに変換するVBAマクロです。
ローカル環境で変換が必要な場合に便利です。
コメント