【问题标题】:Check if a text string contains special characters in excel检查文本字符串是否包含excel中的特殊字符
【发布时间】:2016-06-07 09:24:24
【问题描述】:

正如标题已经提到的,我想检查某个文本字符串是否包含任何特殊字符。

目前我已经创建了一个包含允许字符的列(ASCII 范围 32-122)。如果单元格仅包含允许的字符,我想要一个返回“ok”的公式,如果单元格包含任何不允许的字符,则返回“not ok”。

但是,如果不使用 for 循环,这是否可能? (因此没有 vba)

【问题讨论】:

    标签: excel return special-characters


    【解决方案1】:

    假设您的有效字符列表在A1:A91 中,并且您希望对其执行测试的第一个条目在B1 中,请在C1 中输入此公式:

    =IF(LEN(B1)=0,"",REPT("not ",SUMPRODUCT(0+(ISNUMBER(MATCH(MID(B1,ROW(INDEX(B:B,1):INDEX(B:B,LEN(B1))),1),$A$1:$A$91,0))))<>LEN(B1))&"ok")

    复制下来,为B2B3 等中的字符串提供类似的结果。

    事实上,我们可以不使用工作表中的显式列表,即:

    =IF(LEN(B1)=0,"",REPT("not ",SUMPRODUCT(0+(ABS(77-CODE(MID(B1,ROW(INDEX(B:B,1):INDEX(B:B,LEN(B1))),1)))>45)))&"ok")

    问候

    【讨论】:

    • 似乎单元格中的以下内容使用您的第二个公式返回OK="aa" & CHAR(10) & "aa"
    • 使用 Excel 2010 为我返回“不正常”。
    • 嗯。我正在使用 2016。您的第一个公式有效。第二没有。现在出城几天。我会在退货时重新检查。
    • 你没有把它作为文本输入,我接受它?
    • 正确。完全按照书面形式:一个公式。
    【解决方案2】:

    用你的字符串签入A1:

    =IF(SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>=32)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<=132))=LEN(A1),"OK","Not OK")
    

    编辑 如果要检查的字符串可能包含 Unicode 字符,则必须使用 UNICODE 函数代替 CODE 函数。我相信这个功能在 Excel 2013 中可用。

    =IF(SUMPRODUCT((UNICODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>=32)*(UNICODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<=132))=LEN(A1),"OK","Not OK")
    

    【讨论】:

    • 你介意分解你的公式让我理解吗?还有有没有办法指出哪个字符是问题?在第二个单元格中,例如(只有产生问题的第一个字符就足够了,甚至只是字符串中字符的编号,例如第'n'个字符。因为这个公式似乎有效,但有时它会在我找不到问题的根源。
    • @Weathus ROW(INDIRECT(... 返回一个数字数组,作为MID 函数的起始数字。所以我们返回一个字符串中的字母数组。然后我们使用CODE 函数并测试返回的代码是否在32-132 范围内。我今天早上没有时间查看您的其他问题,但我怀疑没有 VBA 是可能的。使用公式评估工具更深入地检查公式的工作原理。
    • 非常感谢您的澄清。查看公式评估工具有很大帮助。但是我仍然有几个问题:1)为什么我不能通过拆分来复制这个公式?仅执行行(间接(...部分不返回根据公式评估工具创建的数组 2)最后一部分如何工作?您正在执行只有真假语句的 sumproduct。
    • @Weathus 使用ROW(INDIRECT... 将光标放在公式栏中并点击F9 以查看数组。
    • 我认为这个解决方案运行良好,直到我注意到我需要过滤掉的许多特殊字符都无法被您的函数识别。例如。 ≥、β、...都是 unicode 字符,因此无法识别。因此,此解决方案对我来说效果不佳...
    【解决方案3】:

    在 FIND 函数中使用 OR 并在 IF 函数中返回

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 2016-08-24
      • 2014-11-25
      • 2016-08-01
      • 2021-11-21
      • 2023-04-05
      • 2013-06-03
      • 2015-05-06
      • 1970-01-01
      相关资源
      最近更新 更多