Excel 验证字符串项

Excel 验证字符串项,excel,vba,regexp,Excel,Vba,Regexp,我需要在Excel中验证社会保险号(SSN)。我不知道从哪里开始,我在网上到处找,但是没有用。。。如果可以的话,请帮忙。谢谢 以下是验证规则: 字段长度始终为9个数字 不能都是相同的数字(例如,222-22-2222) 不能包含从1到9或9到1(即123-45-6789,9876-54-321) 不能包含数字以外的数据(0-9) 以666,000开头的受限号码 不能将9作为第一个数字` 最后四位数字不能是零(0000) 这不是一个完整的答案。 但是,它将为您提供一个可以扩展以满足更多条件的模板

我需要在Excel中验证社会保险号(SSN)。我不知道从哪里开始,我在网上到处找,但是没有用。。。如果可以的话,请帮忙。谢谢

以下是验证规则:

  • 字段长度始终为9个数字
  • 不能都是相同的数字(例如,
    222-22-2222
  • 不能包含从
    1到9
    9到1
    (即
    123-45-6789
    9876-54-321
  • 不能包含数字以外的数据(
    0-9
  • 666
    000
    开头的受限号码
  • 不能将9作为第一个数字`
  • 最后四位数字不能是零
    (0000)

  • 这不是一个完整的答案。

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

公共函数SSNCheck(作为字符串)作为字符串
我想我会坚持多久
SSNCheck=“坏”
如果Len(s)11,则退出功能
ary=拆分(s,“-”)
如果UBound(ary)2,则退出函数
对于i=0到2
如果不是数字(ary(i)),则退出函数
接下来我
如果Len(ary(0))3,则退出函数
如果Len(ary(1))2,则退出函数
如果Len(ary(2))4,则退出函数
如果ary(2)=“0000”,则退出函数
如果ary(0)&ary(1)&ary(2)=“123456789”,则退出函数
SSNCheck=“好”
端函数
用户定义函数(UDF)非常易于安装和使用:

  • ALT-F11将显示VBE窗口
  • ALT-I ALT-M打开一个新模块
  • 粘贴内容并关闭VBE窗口
  • 如果保存工作簿,则自定义项将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

    要删除UDF,请执行以下操作:

  • 如上所述打开VBE窗口
  • 清除代码
  • 关闭VBE窗口
  • 要使用Excel中的自定义项,请执行以下操作:

    =SSNCheck(A1)

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

    有关UDF的详细信息

    必须启用宏才能工作

    下面的解决方案从

    我注意到这种情况

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

    已因以下原因而无效:

    不能将9作为第一个数字

    使用代码

  • 按AltF11转到visual basic编辑器
  • 插入。。。。模块
  • Sub-OCD\u Kid()开始复制并粘贴代码
  • 按AltF11返回Excel
  • 然后可以使用此用户定义公式(UDF)直接测试电子表格中的值

    • 如果
      A1
      070-22-2794
    • B1
      中输入=
      OCD\u Kid(A1)
      以测试
      A1
    主代码

    试验


    到目前为止你得到了什么?请参阅Excel中的以下函数:if(用于检查条件),and(用于多个条件,len(用于检查SSN的长度),left和right(用于获取SSN中的特定字符),isnumeric(是一个数字)
    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
    
     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