You are here:Home-Domande su Excel VBA e MACRO-[RISOLTO] Estrarre data di nascita dal CF: anni 1900 e 2000-Rispondi a: [RISOLTO] Estrarre data di nascita dal CF: anni 1900 e 2000
Rispondi a: [RISOLTO] Estrarre data di nascita dal CF: anni 1900 e 20002018-01-07T19:03:46+01:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] Estrarre data di nascita dal CF: anni 1900 e 2000 Rispondi a: [RISOLTO] Estrarre data di nascita dal CF: anni 1900 e 2000

Avatarrexottantotto
Partecipante
    Post totali: 175

    In questa discussione su archi forum
    http://archi.forumup.it/viewtopic.php?t=9738&postdays=0&postorder=asc&start=20&mforum=archi
    avevo posto lo stesso problema.
    Riporto il punto in cui sono arrivato.
    Esempio:
    se io inserisco questo CF
    LBRLRT01H15E136C
    e applico questa formula (o un’altra) per estrarre la data di nascita
    =DATA(STRINGA.ESTRAI(D8;7;2);TROVA(STRINGA.ESTRAI( D8;9;1);”ABCDEHLMPRST”);RESTO(STRINGA.ESTRAI(D8;10;2);40))
    mi dà questo risultato:
    15/06/1901
    mentre se estraggo la data di nascita con vba (codice di sid)
    Sub ESTRAZIONE_DATE()
    Dim j As Long
    Dim vCF As Variant, vFinale() As Variant

    With Sheets(“Foglio1”) ‘nome tuo foglio
    vCF = .Range(“D2:D” & .Range(“D” & Rows.Count).End(xlUp).Row)
    ReDim vFinale(1 To UBound(vCF), 1 To 1)
    For j = 1 To UBound(vCF)
    vFinale(j, 1) = ESTRAI_DATA(vCF(j, 1))
    Next j
    .Range(“J2:J” & Rows.Count).ClearContents
    .Range(“J2:J” & UBound(vCF) + 1).Value = vFinale
    End With
    End Sub

    e

    Public Function ESTRAI_DATA(ByVal CF As String) As Variant (codice di sid)
    Dim nAnno As Integer
    Dim vMese As Variant
    vMese = Array(“A”, “B”, “C”, “D”, “E”, “H”, “L”, “M”, “P”, “R”, “S”, “T”)
    On Error GoTo USCITA
    nAnno = IIf(Val(Mid(CF, 7, 2)) <= Right(Year(Date), 2) * 1, Val(Mid(CF, 7, 2)) + 2000, Val(Mid(CF, 7, 2)) + 1900)

    ESTRAI_DATA = DateSerial(nAnno, Application.WorksheetFunction.Match(Mid(CF, 9, 1), _
    vMese, 0), Val(Mid(CF, 10, 2)) Mod 40)
    USCITA:
    If Err.Number <> 0 Then
    ESTRAI_DATA = “CODICE FISCALE NON VALIDO”
    End If
    End Function
    mi dà questo risultato:
    15/06/2001
    Preciso: il problema non sta nei codici perchè, come spiegato da sid, estrarre le date di nascita avendo solo le ultime 2 cifre dell’anno dà risultati imprevisti.
    Volevo vedere, se partendo da questi due codici, con un marchingegno si può risovere il problema.
    E quindi mi è venuro in mente questo:
    se si estraggono tutte e due le date di nascita e poi lasciare all’utente la possibilità di sceglierla e utilizzarla?.
    E’ mera fantasia?
    Non so mettere il codice come nell’altro forum: me lo potete spiegare?

    Grazie