1. Opis funkcji daty i czasu.
Funkcje daty VBA jak na nazwa wskazuje służą do manipulacji wartościami związanymi z datami i czasem. Na ich podstawie możemy otrzymać z podanej daty dowolny parametr jak dzień, miesiąc, rok itp. Możemy także odejmować od siebie dwie daty. Jeśli chcemy wprowadzić do naszego kodu VBA wartość daty, czasu, bądź wartość daty i czasu jednocześnie, możemy skorzystać z następującego kodu:
Sub DateTimeInsertExample() Dim datVal As Date Dim datTimeVal As Date Dim datDatTimeVal As Date datVal = "2016/09/01" datTimeVal = "23:41:59" datDatTimeVal = "2016/09/01 23:41:59" MsgBox (datVal) MsgBox (datTimeVal) MsgBox (datDatTimeVal) End Sub
2. Wykaz funkcji daty i czasu w VBA
Funkcje daty VBA zamieszczam w tabelce. W pierwszej kolejności poznamy funkcje wskazującą bieżącą datę. Całość poniżej:
FUNKCJA | OPIS |
---|---|
DATE() | Zwraca bieżącą datę, wg. daty systemu. Funkcję możemy porównać do formuły DZIŚ() z Excela |
DATEADD(interval, number, date) | Dodaje do podanej określoną liczbę jednostek dat i czasu zgodnie z argumentem interval. Wstawiając znak ujemny przed numerem możemy pomniejszyć wprowadzoną datę. Liczbę jednostek, o którą chcemy zmienić naszą datę podajemy w parametrze number. |
DATEDIFF(interval, date_1, date_2) | Zwraca różnicę dwóch dat i podaje wynik w formie liczby. |
DATEPART(interval, date) | Zwraca wartość części daty lub czasu(rok,dzień, godzina itp.) w zależności od podanego parametru interval. |
DATESERIAL(year, month, day) | Zwraca datę zgodnie z argumentami YMD. |
DATEVALUE(string) | Zwraca datę z wartości tekstowej |
DAY(date) | Zwraca dzień miesiąca z podanej daty w formie liczby 0-31 |
HOUR(date) | Zwraca godzinę w formie liczby 0-24 |
MINUTE(date) | Zwraca liczbę minut z podanej daty w formie liczby 0-59 |
MONTH(date) | Zwraca miesiąc z podanej daty w formie liczby 1-12 |
MONTHNAME(date, [abbreviate]) | Zwraca nazwę dnia miesiąca z podanej daty. Funkcja posiada drugi argument. Wartość True poda nazwę miesiąca w formie skróconej. |
NOW() | Zwraca bieżącą datę i czas |
TIMESERIAL( hour, minute, second ) | Zwraca wartość czasu, zgodnie z podanymi parametrami HMS. |
TIMEVALUE(String) | Zwraca czas z wartości tekstowej |
WEEKDAY(date) | Zwraca dzień tygodnia z podanej daty |
WEEKDAYNAME(number, [abbreviate], [firstdayofweek]) | Zwraca nazwę słowną dnia tygodnia w zależności od podanego numeru dnia tygodnia. Opcjonalny parametr abbreviate z wartością True poda nazwę miesiąca w formie skróconej. Parametr firstdayofweek ustawiony na 2 oznacza, że pierwszym dniem tygodnia jest poniedziałek. |
YEAR(date) | Zwraca rok z podanej daty z zakresu 1900-9999 |
Jak widzisz, część naszych funkcji wykorzystuje jako argumenty interwały czasowe. Są to Interwały dla funkcji DATADD(), DATEDIFF(), DATEPART(). Poniżej tabelka przedstawiająca każdy z interwałów. To właśnie te wartości wpisujemy jako argument funkcji.
Interwał | Znaczenie |
yyyy | Rok |
q | Kwartał |
m | Miesiąc |
y | Dzień roku |
d | Dzień |
w | Dzień tygodnia |
ww | Tydzień |
h | Godzina |
n | Minuta |
s | Sekunda |
2. Przykład z wykorzystaniem funkcji dat i czasu.
Poniżej krótki przykład. Chcemy sprawdzić, jak działają poznane przed chwilą funkcje. Stwórz program w nowym module. Wprowadźmy do kodu 3 zmienne VBA z wartościami daty, czasu oraz daty i czasu jednocześnie.
Sub DateFunctionsExample() Dim datVal As Date Dim datTimeVal As Date Dim datDatTimeVal As Date datVal = "2016/09/01" datTimeVal = "23:41:59" datDatTimeVal = "2016/09/01 23:41:59" MsgBox (datVal) MsgBox (datTimeVal) MsgBox (datDatTimeVal) Range("A1") = Date Range("A2") = DateAdd("m", -2, datVal) Range("A3") = DateDiff("d", Date, datVal) Range("A4") = DatePart("yyyy", datVal) Range("A5") = DateSerial(2015, 1, 1) Range("A6") = DateValue(datVal) Range("A7") = Day(datVal) Range("A8") = Hour(Now()) Range("A9") = Minute(Now()) Range("A10") = Month(datVal) Range("A11") = MonthName(9, True) Range("A12") = Now() Range("A13") = TimeSerial(13, 23, 59) Range("A14") = TimeValue("13:23:59") Range("A15") = Weekday(Date) Range("A16") = WeekdayName(3, True, 2) Range("A17") = Year(Date) End Sub
Plik Excela z naszym przykładem zamieszczam poniżej:
3. Zadania (Rozwiązanie możesz wpisać w komentarzu)
3.1 Oblicz na podstawie daty z dnia dzisiejszego dzień, miesiąc, rok, kwartał.
3.2 Na podstawie bieżącej godziny wstaw do komórek arkusza godzinę, minuty i sekundy
3.3 Sprawdź ile dni zostało do końca roku.
3.4 Sprawdź dzień tygodnia dla daty swoich urodzin.
9 komentarzy “Funkcje daty i czasu w Excel VBA”
Może ktoś podpowiedzieć jak zrobić zadanie 3?
I visit everyday a few web pages and sites to read content, however this webpage gives feature based articles.
Sub a()
Dim data As Date
data = „2017/07/26”
Range(„A1”) = (DatePart(„yyyy”, data))
Range(„A2”) = (DatePart(„y”, data))
Range(„A3”) = (DatePart(„q”, data))
End Sub
Sub b()
Range(„B1”) = Hour(Now())
Range(„B2”) = Minute(Now())
Range(„B3”) = Second(Now())
End Sub
Sub c()
Dim koniec As Date
Dim teraz As Date
koniec = „2017/12/31”
teraz = „2017/07/26”
Range(„C1”) = DateDiff(„d”, teraz, koniec)
End Sub
Sub d()
Range(„D1”) = Weekday(yyyy / mm / dd)
End Sub
Sub daty1()
Range(„G4”) = DatePart(„d”, Date) & ” ” & MonthName(DatePart(„m”, Date), False) & ” ” & DatePart(„yyyy”, Date) & ” qwartał ” & DatePart(„q”, Date)
Range(„G5”) = Hour(Time) & „:” & Minute(Time) & „:” & Second(Time)
Range(„G6”) = DateDiff(„d”, Date, „2017 – 12 – 31”)
Range(„G7”) = Weekday(DateValue(„16 września 1994”), vbMonday)
End Sub
Sub zadanie_15()
MsgBox (Day(Date) & vbCrLf & Month(Date) & vbCrLf & Year(Date) & vbCrLf & DatePart(„q”, Date))
End Sub
Sub zadanie_15_2()
Range(„b1”).Value = DatePart(„h”, Now)
Range(„b2”).Value = DatePart(„n”, Now)
Range(„b3”).Value = DatePart(„s”, Now)
End Sub
Sub zadanie_15_3()
MsgBox (DateDiff(„d”, Date, „31-12-2018”))
End Sub
Sub zadanie_15_4()
MsgBox (Weekday(„10-04-1985”, vbMonday))
End Sub
Nie powiem trochę się namęczyłem, żeby to krótkie było 🙂 Ogólnie super kurs !
Public Function DataUrodzenia(PESEL As String) As String
DataUrodzenia = DateSerial(Left(PESEL, 2), Mid(PESEL, 3, 2), Mid(PESEL, 5, 2))
End Function
Public Function DniDoKoncaRoku() As String
DniDoKoncaRoku = DateDiff(„d”, Date, DateSerial(Year(Date), 12, 31))
End Function
3.1
Option Explicit
Sub FormulyDaty3()
Dim datDate As Date
datDate = Date
MsgBox datDate
MsgBox DatePart(„d”, datDate)
MsgBox DatePart(„m”, datDate)
MsgBox DatePart(„yyyy”, datDate)
MsgBox DatePart(„q”, datDate)
End Sub
3.2
Option Explicit
Sub FunkcjeDaty4()
Range(„D1”) = Hour(Time)
Range(„D2”) = Minute(Time)
Range(„D3”) = DatePart(„s”, Time)
End Sub
3.3
Option Explicit
Sub FunkcjeDaty5()
MsgBox (DateDiff(„d”, Date, „2018/12/31”))
End Sub
Sub Zadanie()
Range(„A1”) = Day(Now())
Range(„A2”) = Month(Now())
Range(„A3”) = Year(Now())
Range(„A4”) = DatePart(„q”, Now())
Range(„A5”) = Hour(Now())
Range(„A6”) = Minute(Now())
Range(„A7”) = DatePart(„s”, Now())
Range(„A8”) = DateSerial(2018, 12, 31) – Date
Range(„A9”) = WeekdayName((Weekday(1973 / 2 / 24)), True, 2)
End Sub
Sub DatyA()
Cells(1, 1) = „Data:”
Cells(1, 2) = Date
Cells(2, 1) = „Dzień:”
Cells(2, 2) = DatePart(„d”, Date)
Cells(3, 1) = „Miesiąc:”
Cells(3, 2) = DatePart(„m”, Cells(1, 2))
Cells(4, 1) = „Rok:”
Cells(4, 2) = DatePart(„yyyy”, Cells(1, 2))
End Sub
Sub DatyB()
Dim Czas As String
Cells(6, 1) = „Data i czas:”
Cells(6, 2) = Now()
Czas = Now()
Cells(7, 1) = „Godzina:”
Cells(7, 2) = DatePart(„h”, Czas)
Cells(8, 1) = „Minuta:”
Cells(8, 2) = DatePart(„n”, Czas)
Cells(9, 1) = „Sekunda:”
Cells(9, 2) = DatePart(„s”, Czas)
End Sub
Sub DatyC()
Dim Sylwester As Date
Sylwester = „2021/12/31”
'Sposób 1
Cells(11, 1) = „Ile dni do końca roku (1):”
Cells(11, 2) = 365 – DatePart(„y”, Cells(1, 2))
'Sposób 2
Cells(12, 1) = „Ile dni do końca roku (2):”
Cells(12, 2) = DateDiff(„y”, Cells(1, 2), Sylwester)
End Sub
Sub DatyD()
Dim Urodziny As Date
Urodziny = „1992/9/16”
Cells(14, 1) = „Dzień tygodnia z daty urodzin:”
Cells(14, 2) = WeekdayName(Weekday(Urodziny), False, 1)
End Sub