Wynik błędny #ARG! wskazuje nam błędny numer PESEL

Można do tego wykorzystać funkcje własne:

Function CzyPESEL(NrPESEL As String) As Boolean
'Funkcja sprawdza poprawność nr PESEL

   Dim LK, SK As Long
   Dim PESEL, Tmp As String
   Dim i As Integer
   Dim L(1 To 10), w(1 To 10) As Byte
   Dim B As Byte
   CzyPESEL = False
   '1-3-7-9-1-3-7-9-1-3
   'Tablica wag

   On Error GoTo Err_
   w(1) = 1: w(2) = 3: w(3) = 7: w(4) = 9: w(5) = 1
   w(6) = 3: w(7) = 7: w(8) = 9: w(9) = 1: w(10) = 3
   'Konwersja
   Tmp = CStr(NrPESEL)
   For i = 1 To Len(Tmp)
       B = Asc(Mid(Tmp, i, 1))
       If B > 47 And B <= 57 Then PESEL = PESEL & Chr(B)
   Next i
   'Długość PESELa
   If Len(PESEL) <> 11 Then Exit Function
   'Kontrola poprawności
   LK = CByte(Val(Right(PESEL, 1)))
   SK = 0
   For i = 1 To 10
       L(i) = CByte(Val(Mid(PESEL, i, 1)))
       SK = SK + (L(i) * w(i) Mod 10)
   Next i
   SK = SK Mod 10
   SK = 10 - SK
  
   If SK = 10 Then SK = 0
   If SK = LK Then CzyPESEL = True
   Err_:
End Function


Function Data_Urodzin(PESEL As String) As Date
   Dim miesiąc As Integer, rok As Integer, dzień As Integer
    If CzyPESEL(PESEL) Then
      miesiąc = Val(Mid(PESEL, 3, 2))
      dzień = Val(Mid(PESEL, 5, 2))
      Select Case miesiąc
      Case 81 To 92
         Data_Urodzin = DateSerial("18" & Left(PESEL, 2), miesiąc - 80, dzień)
      Case 61 To 72
         Data_Urodzin = DateSerial("22" & Left(PESEL, 2), miesiąc - 60, dzień)
      Case 41 To 52
         Data_Urodzin = DateSerial("21" & Left(PESEL, 2), miesiąc - 40, dzień)
      Case 21 To 32
         Data_Urodzin = DateSerial("20" & Left(PESEL, 2), miesiąc - 20, dzień)
      Case 1 To 12
         Data_Urodzin = DateSerial("19" & Left(PESEL, 2), miesiąc, dzień)
      Case Else
         Exit Function
      End Select

    Else
      Data_Urodzin = "Błąd"
    End If
End Function

osuszacze