文字列のUTF-8変換関数
Option Explicit
Function EncodeUTF8(ByVal DataText As String) As String '文字列をUTF-8でエンコードするユーザー定義関数
Dim Data As Variant
Dim D() As String
Dim D2() As String
Dim i As Integer
Dim j As Integer
ReDim Data(Len(DataText))
ReDim D(Len(DataText) * 4)
ReDim D2(Len(DataText) * 3)
If DataText = "" Then
EncodeUTF8 = CVErr(xlErrValue)
Exit Function
End If
For i = 1 To Len(DataText)
Data(i) = Hex(AscW(Mid$(DataText, i, 1)))
For j = 1 To 4
D(i * 4 - 4 + j) = Mid$(Data(i), j, 1)
Next j
Next i
For i = 1 To Len(DataText)
If Len(Data(i)) = 4 Then
D2(i * 3 - 3 + 1) = "%" & Hex(Hex("&H" & D(i * 3 - 3 + 1) + &HE0))
D2(i * 3 - 3 + 2) = "%" & Hex(Hex(("&H" & D(i * 3 - 3 + 2) * 4 + &H80) + ("&H" & D(i * 3 - 3 + 3)
And &HC) / 4))
D2(i * 3 - 3 + 3) = "%" & Hex(("&H" & (D(i * 3 - 3 + 3) & D(i * 3 - 3 + 4)) And &H3F) + &H80)
EncodeUTF8 = EncodeUTF8 & D2(i * 3 - 3 + 1) & D2(i * 3 - 3 + 2) & D2(i * 3 - 3 + 3)
Else
EncodeUTF8 = EncodeUTF8 & "%" & Data(i)
End If
Next i
End Function
Function DecodeUTF8(ByRef DataText As String) As String '文字列をUTF-8からデコードするユーザー定義関数
Dim Data As Variant
Dim i As Integer
Dim D() As String
Data = Split(DataText, "%")
ReDim D(UBound(Data))
For i = 1 To UBound(Data) Step 3
D(i) = Hex(("&H" & Data(i) And &HF) * 16 + ("&H" & Data(i + 1) And &H3C) / 4)
D(i + 1) = Hex(("&H" & Data(i + 1) And &H3) * 64 + ("&H" & Data(i + 2) And &H3F))
D(i + 2) = D(i) & D(i + 1)
DecodeUTF8 = DecodeUTF8 & ChrW("&H" & D(i + 2))
Next i
End Function
以上。
思い付きで作ったので、あまり最適化していないけど誰かの参考になれば幸いです。
Excel2013にはENCODEURL関数があるみたいです。
英数とピリオドは変換しないみたいです。