验证字符串条目

时间:2014-08-19 14:30:58

标签: excel excel-vba vba

我需要在Excel中验证社会安全号码(SSN)。我不知道从哪里开始,我在网上到处都看,但无济于事......如果可以,请帮忙。感谢。

以下是验证规则:

  • 字段长度始终 9 数字。
  • 不能是所有相同的数字(例如222-22-2222
  • 不能包含来自1 to 99 to 1的连续序列号(即123-45-67899876-54-321
  • 不能包含数字(0-9
  • 以外的数据
  • 666000开头的受限制的数字。
  • 不能包含9作为第一个数字。
  • 最后四位数字不能为零(0000)

2 个答案:

答案 0 :(得分:1)

下面的

解决方案大量吸引了here

我注意到这种情况

  

不能包含1到9或9到1的连续序列号(即123-45-6789, 9876-54-321

已经失效:

  

不能包含9作为第一个数字。

使用代码

  1. Alt F11 转到visual basic editor
  2. 插入 .... 模块
  3. Sub OCD_Kid()
  4. 开始复制并粘贴代码
  5. Alt F11 返回Excel
  6. 然后,您可以使用此用户定义公式(UDF)直接测试电子表格中的值。

    • 如果A1070-22-2794
    • B1输入= OCD_Kid(A1)以测试A1
    • 中的字符串

    主要代码

     Function OCD_Kid(strIn As String) As Boolean
     Dim objRegex As Object
     Set objRegex = CreateObject("vbscript.regexp")
     With objRegex
        .Global = True
        .Pattern = "^(?!\b(\d)\1+-(\d)\1+-(\d)\1+\b)(?!123-45-6789)(?!666|000|9\d{2})\d{3}-\d{2}-(?!0{4})\d{4}$"
        OCD_Kid = .test(strIn)
     End With
     End Function
    

    测试

     Sub Tested()
     Debug.Print OCD_Kid("222-22-2222") ' Invalid
     Debug.Print OCD_Kid("070-22-2794") ' Valid
     Debug.Print OCD_Kid("823-45-6789") ' Valid
     Debug.Print OCD_Kid("123-45-6789") ' Invalid
     Debug.Print OCD_Kid("123-45-5789") ' Valid
     End Sub
    

答案 1 :(得分:0)

这不是一个完整的答案。

但是,它会为您提供一个模板,您可以扩展以满足更多条件。这是用户定义函数(UDF)

Public Function SSNCheck(s As String) As String
    Dim i As Long
    SSNCheck = "Bad"
    If Len(s) <> 11 Then Exit Function
    ary = Split(s, "-")
    If UBound(ary) <> 2 Then Exit Function
    For i = 0 To 2
        If Not IsNumeric(ary(i)) Then Exit Function
    Next i
    If Len(ary(0)) <> 3 Then Exit Function
    If Len(ary(1)) <> 2 Then Exit Function
    If Len(ary(2)) <> 4 Then Exit Function
    If ary(2) = "0000" Then Exit Function
    If ary(0) & ary(1) & ary(2) = "123456789" Then Exit Function
    SSNCheck = "Good"
End Function

用户定义函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,UDF将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除UDF:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 从Excel使用UDF:

      = SSNCheck(A1)

      要了解有关宏的更多信息,请参阅:

      http://www.mvps.org/dmcritchie/excel/getstarted.htm

      http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

      http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

      有关UDF的详细信息

      必须启用宏才能使其生效!