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

如何确定单元格是否包含非西方文本?(Excel),excel,Excel,我有一个专栏,其中包含以英语/基本拉丁字符为基础的标题,例如:John Smith和非西方/扩展Unicode字符为基础的标题,例如:黄小琥或比约克 如何检查B列中的a单元格是“普通”英文标题还是相反 如有任何建议,我们将不胜感激 提前感谢。您可以在VBA代码模块中输入此自定义项 Function IsLatin(Str As String) As Boolean IsLatin = True For i = 1 To Len(Str) IsLatin = IsLatin And Abs

我有一个专栏,其中包含以英语/基本拉丁字符为基础的标题,例如:John Smith和非西方/扩展Unicode字符为基础的标题,例如:黄小琥比约克

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

如有任何建议,我们将不胜感激


提前感谢。

您可以在VBA代码模块中输入此自定义项

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
函数IsLatin(Str作为字符串)作为布尔值
IsLatin=True
对于i=1到Len(Str)
IsLatin=IsLatin和Abs(AscW(Mid(Str,i,1))-64)<64
接下来我
端函数
然后,如果文本位于A列,请在单元格B1中输入
=IsLatin(A1)
,然后填写

…或者,在Excel 2013中,您可以使用CTRL+SHIFT+ENTER确认的数组公式:


=和(UNICODE(中间(A1,行(间接(“1:”&LEN(A1))),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循环中最好的编码方式,但它会加快较长字符串的处理速度。

如果我的字符集术语不正确,请随意编辑我的问题!脱离主题;我已标记要迁移到excel.SE。@djechlin请解释在中,我不确定这意味着什么。如中?检查
代码(“X”)
函数。这可能会有所帮助。你检查过他们的字符代码是否超出英语范围吗?谢谢@lori_m的建议,我明天会试试!不幸的是,我尝试过这个VBA函数,但它会为每个条目返回#VALUE!我会做错什么@lori_m吗?你这边没有错,结束括号放错了位置。请重试,希望你现在运气更好。我不知道我是怎么错过的!谢谢@lori_m纠正它!我使用了一些其他工具和一些手动工作完成了工作,但我仍然需要定期这样做,这样可以节省我很多时间!