V tomto článku vytvoříme makro pro extrahování dnů v týdnu mezi dvěma daty.
V tomto příkladu musíme před spuštěním makra zadat datum zahájení a datum ukončení. Makro vybere hodnotu počátečního data z buňky J8 a hodnotu koncového data z buňky J9. Po zadání data zahájení a ukončení lze makro spustit stisknutím tlačítka „Odeslat“ nebo stisknutím klávesové zkratky Alt + F8.
Při spuštění makra vrátí pracovní dny mezi dvěma daty na novém listu. Nově vložený list obsahuje dny ve sloupci A, za nimiž následuje příslušné datum ve sloupci B. Datum výstupu ve sloupci B bude ve formátu dd.mm.rr.
Po každém týdnu bude následovat prázdný řádek pro rozlišení dvou po sobě následujících týdnů.
Logické vysvětlení
V makru jsme použili funkci Weekday k rozlišení mezi všedními dny a víkendy. Funkce formátu slouží k zobrazení data v požadovaném formátu.
Funkce dne v týdnu
Funkce Weekday vrací celočíselnou hodnotu, která představuje den v týdnu.
Syntax
Den v týdnu (Date_Value, [First_Day_Of_Week])
Datum_hodnota určuje hodnotu data, pro které chcete najít den v týdnu.
First_Day_Of_Week určuje, který den v týdnu má být považován za první den v týdnu. Jako vstup potřebuje celočíselnou hodnotu nebo hodnotu zvolenou z výčtu FirstDayOfWeek. Pokud není zadána žádná hodnota, použije se jako výchozí hodnota FirstDayOfWeek.Sunday.
Hodnota výčtu |
Celočíselná hodnota |
Poznámky |
FirstDayOfWeek.System |
0 |
První den v týdnu určený v nastavení systému |
FirstDayOfWeek. Neděle |
1 |
Neděle (výchozí) |
FirstDayOfWeek.Monday |
2 |
pondělí |
FirstDayOfWeek.Tuesday |
3 |
úterý |
FirstDayOfWeek.Wednesday |
4 |
středa |
FirstDayOfWeek. Čtvrtek |
5 |
Čtvrtek |
FirstDayOfWeek.Friday |
6 |
pátek |
FirstDayOfWeek. Sobota |
7 |
sobota |
Jak je vidět z kódu makra, použili jsme Weekday (i, 2) k určení pondělí jako prvního dne v týdnu.
Funkce formátování
Funkce Format bere jako vstup výraz data a vrací jej jako formátovaný řetězec.
Syntaxe funkce Format
Formát (datum_hodnota, formát)
Datum_hodnota určuje hodnotu datového typu data.
Formát používá řetězcovou hodnotu k určení, jaký typ formátu data je vyžadován.
Následující tabulka definuje některé populární znaky, které lze použít k vytvoření požadovaných formátů data/času:
Charakter |
Popis |
d |
zobrazuje den jako číslo bez úvodní nuly (1 - 31) |
dd |
zobrazuje den jako číslo s počáteční nulou (01 - 31) |
ddd |
zobrazuje den jako zkratku (ne - so) |
dddd |
zobrazuje den jako celé jméno (neděle - sobota) |
w |
zobrazuje den v týdnu jako číslo (1 od neděle do 7 v sobotu) |
ww |
zobrazuje týden v roce jako číslo (1 - 54) |
m |
zobrazuje měsíc jako číslo bez úvodní nuly (1 - 12) |
mm |
zobrazuje měsíc jako číslo s počáteční nulou (01 - 12) |
mmm |
zobrazuje měsíc jako zkratku (leden - prosinec) |
mmmm |
zobrazuje měsíc jako úplný název měsíce (leden - prosinec) |
q |
zobrazuje čtvrtletí roku jako číslo (1 - 4) |
y |
zobrazuje den v roce jako číslo (1 - 366) |
yy |
zobrazuje rok jako 2místné číslo (00 - 99) |
rrrr |
zobrazuje rok jako 4místné číslo (100 - 9999) |
h |
zobrazuje hodinu jako číslo bez počátečních nul (0 - 23) |
hh |
zobrazuje hodinu jako číslo s úvodními nulami (00 - 23) |
n |
zobrazuje minutu jako číslo bez úvodních nul (0 - 59) |
nn |
zobrazuje minutu jako číslo s úvodními nulami (00 - 59) |
s |
zobrazí druhé jako číslo bez počátečních nul (0 - 59) |
ss |
zobrazuje druhé jako číslo s úvodními nulami (00 - 59) |
Abychom na konci každého týdne nechali prázdný řádek, zkontrolovali jsme neděli pomocí funkce všední den a zvýšili hodnotu proměnné „StartingRow“ o 1, aby další řádek zůstal prázdný.
Jak je vidět v kódu makra, použili jsme funkci Format dvakrát různými způsoby. Za prvé jsme použili Format (i, "ddd") k získání dne v týdnu a zadruhé jsme použili Format (i, "dd.mm.yy") k získání data ve formátu dd.mm.yyyy.
Vysvětlení kódu
Dim NewWorksheet jako pracovní list
Nastavit NewWorksheet = Worksheets.Add
Výše uvedený kód se používá k deklaraci názvu objektu sešitu jako „NewWorksheet“. Metoda Worksheets.Add se používá k přidání nového listu do kolekce Listů. Příkaz Set slouží k inicializaci deklarovaného objektu s nově vloženým listem.
For i = StartDate To EndDate
Smyčka FOR se používá ke smyčce od počátečního data do koncového data.
If Weekday (i, 2) <6 Then
Příkaz IF se používá ke kontrole podmínky a spuštění kódu na základě podmínky. Výše uvedená podmínka zkontroluje návrat hodnoty funkcí Weekday. Pokud je menší než 6, podmínka IF vrátí hodnotu true a spustí se kód uvnitř příkazu IF. V opačném případě bude přeskočeno.
StartingRow = 1
StartingRow = StartingRow + 1
Proměnná StartingRow se používá k procházení řádků na listu. Na začátku je proměnná inicializována do prvního řádku. S každým úspěšným provedením příkazu IF se hodnota proměnné zvýší o 1 a přesune se na další řádek v listu.
Buňky (StartingRow, 1)
Vlastnost buňky se používá k odkazu na konkrétní buňku v listu. Buňky (číslo_řádku, číslo_sloupce) lze použít k odkazu na libovolnou buňku v listu zadáním konkrétního čísla řádku a čísla sloupce jako parametrů. V kódu Buňky (StartingRow, 1) 1 určuje první sloupec a proměnná „StartingRow“ definuje číslo řádku.
Kódy lze snadno pochopit, protože jsem do makra zahrnul komentáře a kódy.
Pro kód prosím postupujte níže
Možnost Explicit Sub ExtractWeekdays () 'Deklarace dvou proměnných datového typu Date Dim StartDate As Date, EndDate As Date' Declaring worksheet variable Dim NewWorksheet As worksheet Dim StartingRow, i As Long 'Getting start date and end date values from worksheet StartDate = Sheets ( "Makro"). Rozsah ("J8"). Hodnota Datum konce = Listy ("Makro"). Rozsah ("J9"). Hodnota 'Inicializace počátečního řádku pro výstup StartingRow = 1' Vkládání nového listu Nastavit NewWorksheet = Pracovní listy. Add For i = StartDate To EndDate 'Pomocí metody Weekday ke kontrole, zda je Weekday nebo weekand If Weekday (i, 2) <6 Then' Inserting value on nově entered worksheet 'Format format is used for formatting the date value NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Aktualizace hodnoty proměnné StartingRow pro přesun na další řádek StartingRow = StartingRow + 1 End If 'Vkládání prázdného řádku na víkend If Weekday (i, 2) = 7 Then StartingRow = StartingRow + 1 End If N ext i Set NewWorksheet = Nothing End Sub
Pokud se vám tento blog líbil, sdílejte ho se svými přáteli na Facebooku. Také nás můžete sledovat na Twitteru a Facebooku.
Rádi bychom od vás slyšeli, dejte nám vědět, jak můžeme zlepšit naši práci a zlepšit ji pro vás. Napište nám na e -mail