EXCEL2010で使用できるように自作
Option Explicit
Function UNICODE(ByVal TextData As String) As Variant 'UNICODE関数(EXCEL2010で使用できるように自作)
TextData = Left$(TextData, 2)
If TextData <> "" Then
If AscW(Left$(TextData, 1)) < 0 Then
UNICODE = &H10000 + (AscW(Left$(TextData, 1)) + &H10000 - &HD800) * &H400 +
AscW(Right$(TextData, 1)) - &HDC00
Else
UNICODE = AscW(TextData)
End If
Else
UNICODE = CVErr(XlErrValue)
End If
'U+10000以降の文字コードは2つの文字(上位サロゲート・下位サロゲート)を使って
'下記の数式で求められる。
'&H10000 + (上位サロゲート - &HD800) × &H400 + (下位サロゲート - &HDC00)
End Function
Function UNICHAR(ByVal CharCode As Long) As String 'UNICHAR関数(EXCEL2010で使用できるように自作)
Dim High_Surrogates As Long
Dim Low_Surrogates As Long
If CharCode >= &H10000 Then
'元のコードから&H10000を引く
CharCode = CharCode - &H10000
'上位サロゲートを&H400で割った商に&HD800を足す
High_Surrogates = (CharCode \ &H400) + &HD800
'下位サロゲートを&H400で割った余りに&HDC00を足す
Low_Surrogates = (CharCode Mod &H400) + &HDC00
UNICHAR = ChrW(High_Surrogates) & ChrW(Low_Surrogates) '連結
Else
UNICHAR = ChrW(CharCode)
End If
End Function
以上。
ユニコードの文字コードを確認するのに検索してたらExcel2013には関数があるみたいなので作った。
'つちよし'にも対応してます。
Excel2013のUNICODE関数はサロゲートはエラーになるみたい。