MS Excel 自定义 unicode 函数
MS Excel custom unicode function
我的 Excel 文件的一列中有一个如下所示的 IPA 符号列表:
a
ɒ
ɒ̃
ɑː
æ
aɪ
aʊ
aʊə
b
ɔː
我正在使用 unicode 函数来获取每个字符的值。这仅适用于单个字符,因此我正在尝试编写一个自定义函数,该函数将 return 每个字符的值由 .
分隔
但是,该函数无法识别某些(非字母)字符,例如 ɒ̃ 和 æ。
有谁知道我做错了什么吗?
我已经粘贴了下面的代码:
Public Function UnicodeText(text2convert As String)
Dim textLen As Integer
UnicodeText = ""
textLen = Len(text2convert)
If Len(text2convert) = 1 Then
UnicodeText = Asc(text2convert)
Else
For i = 1 To textLen
If i = 1 Then
UnicodeText = UnicodeText & Asc(Left(text2convert, 1)) & "."
Else
If i = textLen Then
UnicodeText = UnicodeText & Asc(Right(text2convert, 1))
Else
UnicodeText = UnicodeText & Asc(Mid(text2convert, i, 1)) & "."
End If
End If
Next i
End If
End Function
此外,它识别字符 ɒ̃ 的长度为 2
这样做的原因是为了确保使用的字符完全相同,因为有些字符如 ɡ 和 g 在某些字体中看起来相同,但实际上是 2 个不同的字符。
如果我正确理解你想要做什么,你可以使用 AscW
功能。 AscW
函数 returns 字符串的 Unicode 字符。
您可以将代码中的 Asc
替换为 AscW
,或者使用以下代码:
Option Explicit
Function uni(S As String) As String
Dim I As Long
Dim sTemp As String
sTemp = ""
For I = 1 To Len(S)
sTemp = sTemp & "." & AscW(Mid(S, I, 1))
Next I
uni = Mid(sTemp, 2)
End Function
顺便说一句,如果您有 O365 以及 TEXTJOIN
和 SEQUENCE
函数,您可以使用此工作表公式:
=TEXTJOIN(".",TRUE,UNICODE(MID(A1,SEQUENCE(LEN(A1)),1)))
如果您有 TEXTJOIN
但没有 SEQUENCE
函数,您可以将 SEQUENCE
函数调用替换为 ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(A1)))
=TEXTJOIN(".",TRUE,UNICODE(MID(A1,ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(A1))),1)))
CHAR(CODE) 与 UNICHAR(UNICODE)
这里没有解决方案。这只是对这里发生的事情的视觉解释。它显示 AC
列的 'transformation',CODE
到 EFG
列,UNICODE
到 HIJ
列,然后再返回 [=15] =] 到 KLM
列,UNICHAR
到 NOP
列。 Q
列代表 OP 函数的结果,而 RS
列代表 Jon Rosenfeld 的解决方案的结果。下面我添加了我的语言中的关键字符。
我的 Excel 文件的一列中有一个如下所示的 IPA 符号列表:
a
ɒ
ɒ̃
ɑː
æ
aɪ
aʊ
aʊə
b
ɔː
我正在使用 unicode 函数来获取每个字符的值。这仅适用于单个字符,因此我正在尝试编写一个自定义函数,该函数将 return 每个字符的值由 .
分隔但是,该函数无法识别某些(非字母)字符,例如 ɒ̃ 和 æ。
有谁知道我做错了什么吗?
我已经粘贴了下面的代码:
Public Function UnicodeText(text2convert As String)
Dim textLen As Integer
UnicodeText = ""
textLen = Len(text2convert)
If Len(text2convert) = 1 Then
UnicodeText = Asc(text2convert)
Else
For i = 1 To textLen
If i = 1 Then
UnicodeText = UnicodeText & Asc(Left(text2convert, 1)) & "."
Else
If i = textLen Then
UnicodeText = UnicodeText & Asc(Right(text2convert, 1))
Else
UnicodeText = UnicodeText & Asc(Mid(text2convert, i, 1)) & "."
End If
End If
Next i
End If
End Function
此外,它识别字符 ɒ̃ 的长度为 2
这样做的原因是为了确保使用的字符完全相同,因为有些字符如 ɡ 和 g 在某些字体中看起来相同,但实际上是 2 个不同的字符。
如果我正确理解你想要做什么,你可以使用 AscW
功能。 AscW
函数 returns 字符串的 Unicode 字符。
您可以将代码中的 Asc
替换为 AscW
,或者使用以下代码:
Option Explicit
Function uni(S As String) As String
Dim I As Long
Dim sTemp As String
sTemp = ""
For I = 1 To Len(S)
sTemp = sTemp & "." & AscW(Mid(S, I, 1))
Next I
uni = Mid(sTemp, 2)
End Function
顺便说一句,如果您有 O365 以及 TEXTJOIN
和 SEQUENCE
函数,您可以使用此工作表公式:
=TEXTJOIN(".",TRUE,UNICODE(MID(A1,SEQUENCE(LEN(A1)),1)))
如果您有 TEXTJOIN
但没有 SEQUENCE
函数,您可以将 SEQUENCE
函数调用替换为 ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(A1)))
=TEXTJOIN(".",TRUE,UNICODE(MID(A1,ROW(INDEX($A:$A,1):INDEX($A:$A,LEN(A1))),1)))
CHAR(CODE) 与 UNICHAR(UNICODE)
这里没有解决方案。这只是对这里发生的事情的视觉解释。它显示 AC
列的 'transformation',CODE
到 EFG
列,UNICODE
到 HIJ
列,然后再返回 [=15] =] 到 KLM
列,UNICHAR
到 NOP
列。 Q
列代表 OP 函数的结果,而 RS
列代表 Jon Rosenfeld 的解决方案的结果。下面我添加了我的语言中的关键字符。