Wprowadź dni powszednie od poniedziałku do piątku w arkuszu za pomocą VBA w programie Microsoft Excel

Anonim

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