Zamiana Pesel na datę VBA Excel

Funkcja VBA – zamiana numeru Pesel na datę urodzenia.

W tym artykule dowiesz się jak napisać funkcję VBA Excel zamieniająca PESEL na datę urodzenia. W jednym z poprzednich artykułów opisywałem w jaki sposób zamienić numer pesel na datę urodzenia za pomocą formuł Excel. Treść artykułu zamieściłem pod tym adresem: Pesel na datę Excel. W tym artykule opisuję, jak napisać funkcję VBA, która zamienia PESEL na datę urodzenia. To, jak napisać samodzielnie funkcje VBA Excel zamieszczałem w tym artykule: VBA pisanie własnych funkcji. Poniżej przykład takiej funkcji. Zacznijmy od spisania wymagań:

  • Numer PESEL składa się z 11 znaków
  • Pierwsze 6 cyfr numeru określają datę urodzenia kolejno: rok, miesiąc, dzień
  • Numery PESEL osób urodzonych po roku 2000 mają liczbę określającą miesiąc urodzenia zwiększoną o 20

Poniżej przykład takiej formuły w Excel, dla numeru Pesel wprowadzonego w komórce A1:

--tomaszkenig.pl
=DATA(JEŻELI(WARTOŚĆ(FRAGMENT.TEKSTU(A1;3;2))>12;20;19)&LEWY(A1;2);MOD(FRAGMENT.TEKSTU(A1;3;2);20);FRAGMENT.TEKSTU(A1;5;2))

Poniżej przykład funkcji VBA zamieniającej PESEL na datę urodzenia:

'tomaszkenig.pl
Function PESEL_NA_DATE(strPesel As String) As String

Dim intYear As Integer
Dim intMonth As Integer
Dim intDay As Integer

If CInt(Mid(strPesel, 3, 2)) > 12 Then
intYear = 2000 + CInt(Left(strPesel, 2))
Else: intYear = 1900 + CInt(Left(strPesel, 2))
End If

intMonth = CInt(Mid(strPesel, 3, 2)) Mod 20
intDay = CInt(Mid(strPesel, 5, 2))
PESEL_NA_DATE = DateSerial(intYear, intMonth, intDay)

End Function

Powyższy przykład pokazuje w jaki sposób obliczenia wykonywane są krok po kroku. Poniżej ten sam przykład bez wprowadzania zmiennych do kodu VBA. Działa też szybciej:)

'tomaszkenig.pl
Function PESEL_NA_DATE2(strPesel As String) As String

If CInt(Mid(strPesel, 3, 2)) > 12 Then
PESEL_NA_DATE2 = DateSerial(2000 + CInt(Left(strPesel, 2)), CInt(Mid(strPesel, 3, 2)) Mod 20, CInt(Mid(strPesel, 5, 2)))
Else: PESEL_NA_DATE2 = DateSerial(1900 + CInt(Left(strPesel, 2)), CInt(Mid(strPesel, 3, 2)) Mod 20, CInt(Mid(strPesel, 5, 2)))
End If

End Function
Pesel na datę VBA - funkcja użytkownika
Pesel na datę VBA – funkcja użytkownika

Zwróć uwagę na to ze wynik funkcji Pesel na datę VBA zwracany jest w typie string a nie date. Dzięki temu w arkuszu od razu nasza data zapisywana jest w formie daty, a nie  liczby reprezentującego datę. Podobne przykłady użycia VBA w Excel zamieszczam w tym dziale Excel VBA przykłady. Jeśli chciałbyś podszkolić się z programowania w VBA skorzystaj z kursu zamieszczonego na mojej stronie: Kurs VBA. Plik z omawianym przykładem zamieszczam poniżej:

vba_excel_pesel_na_date.xlsm

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *