如何确定单元格是否包含非西方文本? (EXCEL)

时间:2013-05-28 16:39:16

标签: excel

我有一个包含标题的专栏,其中包含基于英语/基本拉丁字符的标题,例如: John Smith 和非西方/扩展的基于Unicode字符的标题,例如:黄小琥Björk

如何检查B列中的单元格是“普通”英文标题还是相反?

任何指针/建议都会感激不尽!

提前致谢。

2 个答案:

答案 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循环中最好的编码实践类型,但它会加快处理更长的字符串。