问问题
22671 次
2 回答
7
您可以在 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
于 2013-05-28T18:24:24.390 回答
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 循环中最好的编码实践类型,但它会加快处理较长字符串的速度。
于 2017-05-19T17:05:12.847 回答