我有一个包含标题的专栏,其中包含基于英语/基本拉丁字符的标题,例如: John Smith 和非西方/扩展的基于Unicode字符的标题,例如:黄小琥或Björk
如何检查B列中的单元格是“普通”英文标题还是相反?
任何指针/建议都会感激不尽!
提前致谢。
答案 0 :(得分:3)
您可以在VBA代码模块中输入此UDF。
Function IsLatin(Str As String) As Boolean
IsLatin = True
For i = 1 To Len(Str)
IsLatin = IsLatin And Abs(AscW(Mid(Str, i, 1)) - 64) < 64
Next i
End Function
然后,如果您的文字位于A栏,请输入单元格B1 =IsLatin(A1)
并填写。
...或者在Excel 2013中,你可以使用CTRL + SHIFT + ENTER确认的数组公式:
=AND(UNICODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<128)
也从B1填补。
注意:CODE
不能用于此,因为它会将unicode转换为拉丁字母,例如=CODE("α")
和=CODE("a")
都返回63
答案 1 :(得分:1)
当我在混合英语和日语的字符串上尝试@ lori_m的VBA代码时,我遇到了溢出问题。不确定为什么。我稍微修改了它现在对我有用:
Private Function is_latin(ByVal str As String) As Boolean
Dim i As Integer
is_latin = True
For i = 1 To Len(str)
If Abs(AscW(Mid(str, i, 1)) - 64) >= 64 Then
is_latin = False
Exit For
End If
Next i
End Function
第一次找到非拉丁字符时,它也会以false结尾退出。这不是FOR循环中最好的编码实践类型,但它会加快处理更长的字符串。