4
4

2 回答 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 回答