W tym artykule stworzymy makro do wyodrębniania dni tygodnia pomiędzy dwiema datami.
W tym przykładzie musimy określić datę rozpoczęcia i datę zakończenia przed uruchomieniem makra. Makro wybiera wartość daty początkowej z komórki J8 i wartość daty końcowej z komórki J9. Po określeniu daty rozpoczęcia i zakończenia, makro można wykonać, naciskając przycisk „Prześlij” lub naciskając klawisze skrótu Alt + F8.
Po uruchomieniu makra zwróci dni tygodnia między dwiema datami w nowym arkuszu. Nowo wstawiony arkusz zawiera dni tygodnia w kolumnie A, a następnie odpowiednią datę w kolumnie B. Data wyjściowa w kolumnie B będzie w formacie dd.mm.rr.
Po każdym tygodniu pojawi się pusty wiersz, aby odróżnić dwa kolejne tygodnie.
Wyjaśnienie logiczne
W makrze użyliśmy funkcji Weekday do rozróżnienia dni tygodnia od weekendów. Funkcja Format służy do wyświetlania daty w wymaganym formacie.
Funkcja dnia powszedniego
Funkcja Weekday zwraca wartość całkowitą, która reprezentuje dzień tygodnia.
Składnia
Dzień tygodnia( Date_Value, [First_Day_Of_Week] )
Data_Wartość określa wartość daty, dla której chcesz znaleźć dzień tygodnia.
Pierwszy dzień tygodnia określa, który dzień tygodnia ma być uważany za pierwszy dzień tygodnia. Jako dane wejściowe przyjmuje wartość całkowitą lub wartość wybraną z wyliczenia FirstDayOfWeek. Jeśli nie określono żadnej wartości, FirstDayOfWeek.Sunday jest używana jako wartość domyślna.
Wartość wyliczenia |
Wartość całkowita |
Uwagi |
FirstDayOfWeek.System |
0 |
Pierwszy dzień tygodnia określony w ustawieniach systemu |
PierwszyDzień Tygodnia.Niedziela |
1 |
Niedziela (domyślnie) |
FirstDayOfWeek.Poniedziałek |
2 |
poniedziałek |
FirstDayOfWeek.Wtorek |
3 |
Wtorek |
FirstDayOfWeek.Środa |
4 |
Środa |
FirstDayOfWeek.Czwartek |
5 |
czwartek |
FirstDayOfWeek.Friday |
6 |
piątek |
Pierwszy dzień tygodnia. sobota |
7 |
sobota |
Jak widać z kodu makra, użyliśmy Weekday(i, 2), aby określić poniedziałek jako pierwszy dzień tygodnia.
Funkcja formatowania
Funkcja Format przyjmuje jako dane wejściowe wyrażenie daty i zwraca je jako sformatowany ciąg.
Składnia funkcji Format
Format(Data_Wartość,format)
Data_Wartość określa wartość typu danych date.
Format używa wartości ciągu, aby określić, jaki typ formatu daty jest wymagany.
Poniższa tabela definiuje kilka popularnych znaków, których można użyć do stworzenia wymaganych formatów daty/czasu:
Postać |
Opis |
D |
wyświetla dzień jako liczbę bez wiodącego zera (1 - 31) |
dd |
wyświetla dzień jako liczbę z wiodącym zerem (01 - 31) |
ddd |
wyświetla dzień jako skrót (Sun - Sat) |
dddd |
wyświetla dzień jako pełną nazwę (niedziela - sobota) |
w |
wyświetla dzień tygodnia jako liczbę (1 dla niedzieli do 7 dla soboty) |
w W |
wyświetla tydzień roku jako liczbę (1 - 54) |
m |
wyświetla miesiąc jako liczbę bez wiodącego zera (1–12) |
mm |
wyświetla miesiąc jako liczbę z wiodącym zerem (01 - 12) |
mmm |
wyświetla miesiąc jako skrót (styczeń-grudzień) |
mmmm |
wyświetla miesiąc jako pełną nazwę miesiąca (styczeń - grudzień) |
Q |
wyświetla kwartał roku jako liczbę (1 - 4) |
tak |
wyświetla dzień roku jako liczbę (1 - 366) |
yy |
wyświetla rok jako 2-cyfrową liczbę (00 - 99) |
rrrr |
wyświetla rok jako 4-cyfrową liczbę (100 - 9999) |
h |
wyświetla godzinę jako liczbę bez wiodących zer (0 - 23) |
hh |
wyświetla godzinę jako liczbę z wiodącymi zerami (00 - 23) |
n |
wyświetla minutę jako liczbę bez wiodących zer (0 - 59) |
nn |
wyświetla minutę jako liczbę z wiodącymi zerami (00 - 59) |
s |
wyświetla sekundę jako liczbę bez wiodących zer (0 - 59) |
SS |
wyświetla sekundę jako liczbę z wiodącymi zerami (00 - 59) |
Aby zostawić pusty wiersz na koniec każdego tygodnia, sprawdziliśmy niedziele funkcją tygodnia i zwiększyliśmy wartość zmiennej „StartingRow” o 1 tak, aby następny wiersz pozostał pusty.
Jak widać w kodzie makra, użyliśmy funkcji Format dwa razy na różne sposoby. Po pierwsze, użyliśmy Format(i, "ddd"), aby uzyskać dzień tygodnia, a po drugie, użyliśmy Format(i, "dd.mm.rr"), aby uzyskać datę w formacie dd.mm.rrrr.
Wyjaśnienie kodu
Dim NewWorksheet jako Worksheet
Ustaw NewWorksheet = Worksheets.Add
Powyższy kod służy do deklarowania nazwy obiektu Worksheet jako „NewWorksheet”. Metoda Worksheets.Add służy do dodawania nowego arkusza w kolekcji Worksheets. Instrukcja Set służy do inicjalizacji zadeklarowanego obiektu z nowo wstawionym arkuszem.
Dla i = data rozpoczęcia do data zakończenia
Pętla FOR służy do wykonywania pętli od daty rozpoczęcia do daty zakończenia.
Jeśli dzień tygodnia (i, 2) < 6 Wtedy
Instrukcja IF służy do sprawdzenia warunku i wykonania kodu na podstawie warunku. Powyższy warunek sprawdzi wartość zwracaną przez funkcję Weekday. Jeśli jest mniejszy niż 6, warunek IF zwraca prawdę i kod wewnątrz instrukcji IF zostanie wykonany. W przeciwnym razie zostanie pominięty.
Wiersz początkowy = 1
Wiersz początkowy = Wiersz początkowy + 1
Zmienna StartingRow służy do poruszania się po wierszach w arkuszu. Na początku zmienna jest inicjowana w pierwszym wierszu. Z każdym pomyślnym wykonaniem instrukcji IF, wartość zmiennej jest zwiększana o 1, przechodząc do następnego wiersza w arkuszu.
Komórki (wiersz początkowy, 1)
Właściwość Cells służy do odwoływania się do określonej komórki w arkuszu. Komórki (numer_wiersza,numer_kolumny) mogą służyć do odwoływania się do dowolnej komórki w arkuszu, wprowadzając jako parametry numer wiersza i numer kolumny. W kodzie Cells(StartingRow, 1) 1 określa pierwszą kolumnę, a zmienna „StartingRow” określa numer wiersza.
Kody można łatwo zrozumieć, ponieważ umieściłem komentarze wraz z kodami w makrze.
Proszę postępować zgodnie z poniższym kodem!
Option Explicit Sub ExtractWeekdays() 'Deklarowanie dwóch zmiennych typu danych Date Dim StartDate As Date, EndDate As Date 'Deklarowanie zmiennej arkusza Dim NewWorksheet As Worksheet Dim StartingRow, i As Long 'Pobieranie wartości daty rozpoczęcia i daty zakończenia z arkusza StartDate = Sheets( "Macro").Range("J8").Value EndDate = Sheets("Macro").Range("J9").Value 'Inicjowanie początkowego numeru wiersza dla danych wyjściowych InitialRow = 1 'Wstawianie nowego arkusza Set NewWorksheet = Worksheets. Add For i = StartDate To EndDate 'Używając metody Dzień tygodnia do sprawdzenia, czy jest to Dzień tygodnia czy tydzień oraz If Dzień tygodnia(i, 2) < 6 Then 'Wstawianie wartości na nowo wstawionym arkuszu 'Do formatowania wartości daty służy metoda Format NewWorksheet.Cells( InitialRow, 2) = Format(i, "dd.mm.rr") NewWorksheet.Cells(StartingRow, 1) = Format(i, "ddd") 'Aktualizowanie wartości zmiennej InitialRow w celu przejścia do następnego wiersza InitialRow = InitialRow + 1 End If 'Wstawianie pustego wiersza dla weekendu If Weekday(i, 2) = 7 Then StartingRow = InitialRow + 1 End If N ext i Set NewWorksheet = Nic Koniec Sub
Jeśli podobał Ci się ten blog, podziel się nim ze znajomymi na Facebooku. Możesz również śledzić nas na Twitterze i Facebooku.
Chcielibyśmy usłyszeć od Ciebie, daj nam znać, jak możemy poprawić naszą pracę i uczynić ją lepszą dla Ciebie. Napisz do nas na stronie e-mail