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
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: