如何在Excel中的特殊单元格上放置特殊字符的文本验证?

时间:2019-07-04 11:51:25

标签: excel vba excel-formula

在excel的特定单元格中,我必须进行验证,以便用户无法使用特殊章程(例如"-"",""|""/")输入文本值,...之间,除了"_"(下划线)。

我为此编写了一个自定义公式,它可以工作,但是有一个局限,不能完全解决我的问题。

这是一个公式:

=ISNUMBER(FIND("_",A1))

因此,当用户在文本值之间输入带有",""-"之类的其他字符的文本时,将引发验证错误。

但是,如果用户仅输入没有任何特殊字符的文本,则也会引发错误,并且用户将无法输入文本。

如果用户仅输入文本,则允许该文本,但如果用户输入具有特殊字符的文本,则仅允许"_"特殊字符。

示例:

  • 允许:"StackOverflow""Stack_Overflow"
  • 不允许:"Stack-Overflow""Stack, Overflow"或任何其他特殊字符。

3 个答案:

答案 0 :(得分:4)

对于仅允许这些字符[A-Za-z0-9_]使用Regular Expressions的更复杂的测试。

此模式^[A-Za-z0-9_]+$仅允许...

  • [A-Z]大写字母
  • [a-z]小写字母
  • [0-9]个数字
  • [_]下划线

…其中任何一个至少发生一次或多次。不允许使用任何其他字符。查看并在以下位置进行测试:https://regex101.com/r/DnQrAq/1

Option Explicit

Public Function SpecialValidate(ByVal InputValue As String) As Boolean
    Dim RegEx As Object
    Set RegEx = CreateObject("vbscript.regexp")

    Const RegExPattern As String = "^[A-Za-z0-9_]+$"

    With RegEx
        .Pattern = RegExPattern
        .Global = True
        .MultiLine = True

        If .test(InputValue) Then
            SpecialValidate = True
        End If
    End With
End Function

然后,您可以轻松地将其用作公式=SpecialValidate(A2)来验证任何单元格值:

enter image description here 很抱歉,德语截图: WAHR = TRUEFALSCH = FALSE

答案 1 :(得分:1)

这假定排除组中的单个字符也无效:

=SUM(ISNUMBER(FIND("-",A1)),ISNUMBER(FIND(",",A1)),ISNUMBER(FIND("|",A1)),ISNUMBER(FIND("/",A1)))=0

由于数组常量不能包含在验证公式中,因此可以分别列出每个排除的字符。

有了应包含或排除的内容的完整列表,可能会有更紧凑的公式。

答案 2 :(得分:0)

您可以使用:

=IF(IF(LEN(C1)-LEN(SUBSTITUTE(C1,"-",""))>0,1,0)+IF(LEN(C1)-LEN(SUBSTITUTE(C1,",",""))>0,1,0)+IF(LEN(C1)-LEN(SUBSTITUTE(C1,"/",""))>0,1,0)+IF(LEN(C1)-LEN(SUBSTITUTE(C1,"|",""))>0,1,0)>0,"Invalid Character","Correct")

结果:

enter image description here