EXCEL2013以降の関数をEXCEL2010に移植

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関数はサロゲートはエラーになるみたい。