U ovom ćemo članku stvoriti makro za izdvajanje radnih dana između dva datuma.
U ovom primjeru moramo navesti datum početka i datum završetka prije izvođenja makronaredbe. Makro bira vrijednost datuma početka iz ćelije J8, a vrijednost datuma završetka iz ćelije J9. Nakon određivanja datuma početka i završetka, makro se može izvršiti pritiskom na tipku „Pošalji“ ili pritiskom tipki prečaca Alt + F8.
Prilikom pokretanja makronaredbe vratit će se radni dani između dva datuma na novom listu. Novo umetnuti radni list sadrži dane u stupcu A, nakon čega slijedi odgovarajući datum u stupcu B. Izlazni datum u stupcu B bit će u formatu dd.mm.yy.
Nakon svakog tjedna slijedi prazan redak za razlikovanje dva uzastopna tjedna.
Logično objašnjenje
U makronaredbi smo koristili funkciju Radni dan za razlikovanje radnih dana i vikenda. Funkcija oblikovanja koristi se za prikaz datuma u traženom formatu.
Funkcija za radni dan
Funkcija Radni dan vraća cijelu vrijednost koja predstavlja dan u tjednu.
Sintaksa
Radni dan (Datum_Vrijednost, [Prvi_Dan_O__Tjedan])
Datum_Vrijednost određuje vrijednost datuma za koju želite pronaći dan u tjednu.
Prvi_DAN_Nedelja određuje koji se dan u tjednu smatra prvim danom u tjednu. Za ulaz je potrebna cijela vrijednost ili vrijednost odabrana iz nabrajanja FirstDayOfWeek. Ako nije navedena vrijednost, tada se FirstDayOfWeek.Sunday koristi kao zadana vrijednost.
Vrijednost nabrajanja |
Cijela vrijednost |
Opaske |
FirstDayOfWeek.System |
0 |
Prvi dan u tjednu naveden u postavkama sustava |
Prvi danOtjedan.nedelja |
1 |
Nedjelja (zadano) |
Prvi danOtjedan.ponedjeljak |
2 |
ponedjeljak |
Prvi danOtjedan.Utorak |
3 |
utorak |
FirstDayOfWeek.Srijeda |
4 |
srijeda |
Prvi danOtjedan.Četvrtak |
5 |
četvrtak |
Prvi danOtjedan.PETAK |
6 |
petak |
PrviDanOtjedan.Subota |
7 |
subota |
Kao što se vidi iz koda makronaredbe, koristili smo dan u tjednu (i, 2) za navođenje ponedjeljka kao prvog dana u tjednu.
Funkcija oblikovanja
Funkcija Format uzima izraz datuma kao ulaz i vraća ga kao oblikovani niz.
Sintaksa funkcije Format
Format (Date_Value, format)
Datum_Vrijednost određuje vrijednost vrste podataka datuma.
Format koristi vrijednost niza za navođenje vrste formata datuma koji je potreban.
Sljedeća tablica definira neke popularne znakove koje možete koristiti za stvaranje potrebnih formata datuma/vremena:
Lik |
Opis |
d |
prikazuje dan kao broj bez početne nule (1 - 31) |
dd |
prikazuje dan kao broj s početnom nulom (01 - 31) |
ddd |
prikazuje dan kao skraćenicu (ned - sub) |
dddd |
prikazuje dan kao puno ime (nedjelja - subota) |
w |
prikazuje dan u tjednu kao broj (1 za nedjelju do 7 za subotu) |
ww |
prikazuje tjedan u godini kao broj (1 - 54) |
m |
prikazuje mjesec kao broj bez početne nule (1 - 12) |
mm |
prikazuje mjesec kao broj s početnom nulom (01 - 12) |
mmm |
prikazuje mjesec kao skraćenicu (siječanj - prosinac) |
mmmm |
prikazuje mjesec kao puno ime mjeseca (siječanj - prosinac) |
q |
prikazuje kvartal u godini kao broj (1 - 4) |
y |
prikazuje dan u godini kao broj (1 - 366) |
yy |
prikazuje godinu kao dvoznamenkasti broj (00 - 99) |
gggg |
prikazuje godinu kao četveroznamenkasti broj (100 - 9999) |
h |
prikazuje sat kao broj bez vodećih nula (0 - 23) |
hh |
prikazuje sat kao broj s početnim nulama (00 - 23) |
n |
prikazuje minutu kao broj bez vodećih nula (0 - 59) |
nn |
prikazuje minutu kao broj s vodećim nulama (00 - 59) |
s |
prikazuje drugu kao broj bez vodećih nula (0 - 59) |
ss |
prikazuje drugu kao broj s vodećim nulama (00 - 59) |
Kako bismo na kraju svakog tjedna ostavili prazan redak, provjerili smo ima li nedjelje pomoću funkcije radnim danom i povećali vrijednost varijable "StartingRow" za 1 tako da sljedeći redak ostane prazan.
Kao što se vidi u kodu makronaredbe, funkciju Format smo koristili dva puta na različite načine. Prvo, koristili smo Format (i, "ddd") za dobivanje radnog dana, a drugo, koristili smo Format (i, "dd.mm.yy") da bismo dobili datum u formatu dd.mm.yyyy.
Objašnjenje koda
Zatamnite novi radni list kao radni list
Postavi NewWorksheet = Radni listovi.Dodaj
Gornji kôd koristi se za deklariranje naziva objekta radnog lista kao “NewWorksheet”. Radni listovi. Metoda Dodavanje koristi se za dodavanje novog radnog lista u zbirku Radni listovi. Naredba set koristi se za inicijalizaciju deklariranog objekta s novo umetnutim listom.
Za i = Datum početka do datuma završetka
FOR petlja služi za petlju od datuma početka do datuma završetka.
Ako je radni dan (i, 2) <6 Tada
Naredba IF koristi se za provjeru stanja i izvršavanje koda na temelju uvjeta. Gore navedeni uvjet će provjeriti povrat vrijednosti pomoću funkcije Radni dan. Ako je manje od 6, IF uvjet vraća vrijednost true i kôd unutar naredbe IF će se izvršiti. U suprotnom će se preskočiti.
StartingRow = 1
StartingRow = StartingRow + 1
Varijabla StartingRow koristi se za kretanje kroz retke na radnom listu. Na početku se varijabla inicijalizira u prvi red. Sa svakim uspješnim izvršavanjem IF naredbe, vrijednost varijable se povećava za 1, prelazeći na sljedeći red u listu.
Ćelije (StartingRow, 1)
Svojstvo ćelija koristi se za pozivanje na određenu ćeliju na radnom listu. Ćelije (broj redaka, broj stupca) mogu se koristiti za referenciranje bilo koje ćelije na radnom listu unošenjem određenog broja retka i broja stupca kao parametara. U kodu Ćelije (StartingRow, 1), 1 navodi prvi stupac, a varijabla "StartingRow" definira broj retka.
Kodovi se mogu lako razumjeti jer sam u makro uključio komentare zajedno s kodovima.
Molimo slijedite dolje za kôd
Opcija Eksplicitni Sub ExtractWeekdays () 'Deklariranje dviju varijabli vrste podataka Datum Dim StartDate kao datum, EndDate kao datum' Deklariranje varijable radnog lista Dim NewWorksheet kao radni list Dim StartingRow, i As Long 'Dobivanje datuma početka i datuma završetka s radnog lista StartDate = Sheets ( "Makro"). Raspon ("J8"). Vrijednost Krajnji datum = listovi ("makro"). Raspon ("J9"). Vrijednost 'Pokretanje broja početnog retka za izlaz StartingRow = 1' Umetanje novog radnog lista Postavite novi radni list = Radni listovi. Dodaj za i = Datum početka do kraja datuma 'Metodom dana u tjednu provjerite je li dan u tjednu ili vikend Ako je dan u tjednu (i, 2) <6 Zatim se metoda "Umetanje vrijednosti na novo umetnuti radni list" koristi za oblikovanje vrijednosti datuma NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Ažuriranje vrijednosti varijable StartingRow za prelazak u sljedeći red StartingRow = StartingRow + 1 End If 'Umetanje praznog retka za vikend If Weekday (i, 2) = 7 Then StartingRow = StartingRow + 1 End If N ext i Postavi novi radni list = Ništa ne završava pod
Ako vam se dopao ovaj blog, podijelite ga sa svojim prijateljima na Facebooku. Također, možete nas pratiti na Twitteru i Facebooku.
Voljeli bismo vas čuti, javite nam kako možemo poboljšati svoj rad i učiniti ga boljim za vas. Pišite nam na web stranici e -pošte