在excel的特定单元格中,我必须进行验证,以便用户无法使用特殊章程(例如"-"
,","
,"|"
,"/"
)输入文本值,...之间,除了"_"
(下划线)。
我为此编写了一个自定义公式,它可以工作,但是有一个局限,不能完全解决我的问题。
这是一个公式:
=ISNUMBER(FIND("_",A1))
因此,当用户在文本值之间输入带有","
或"-"
之类的其他字符的文本时,将引发验证错误。
但是,如果用户仅输入没有任何特殊字符的文本,则也会引发错误,并且用户将无法输入文本。
如果用户仅输入文本,则允许该文本,但如果用户输入具有特殊字符的文本,则仅允许"_"
特殊字符。
示例:
"StackOverflow"
,"Stack_Overflow"
"Stack-Overflow"
,"Stack, Overflow"
或任何其他特殊字符。答案 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)
来验证任何单元格值:
答案 1 :(得分:1)
这假定排除组中的单个字符也无效:
=SUM(ISNUMBER(FIND("-",A1)),ISNUMBER(FIND(",",A1)),ISNUMBER(FIND("|",A1)),ISNUMBER(FIND("/",A1)))=0
由于数组常量不能包含在验证公式中,因此可以分别列出每个排除的字符。
有了应包含或排除的内容的完整列表,可能会有更紧凑的公式。
答案 2 :(得分:0)