I denne artikel vil vi oprette en makro til at udtrække hverdagene mellem to datoer.
I dette eksempel skal vi angive startdato og slutdato, før vi kører makroen. Makro vælger startdatoværdien fra celle J8 og slutdatoværdi fra celle J9. Efter angivelse af start- og slutdato kan makroen udføres ved at trykke på knappen "Send" eller trykke på genvejstaster Alt + F8.
Når makroen køres, vender den tilbage på hverdage mellem to datoer på et nyt ark. Det nyligt indsatte regneark indeholder hverdage i kolonne A, efterfulgt af den respektive dato i kolonne B. Outputdato i kolonne B vil være i dd.mm.åå -format.
Hver uge efterfølges af en tom række for at skelne mellem to på hinanden følgende uger.
Logisk forklaring
I makroen har vi brugt Weekday -funktionen til at skelne mellem hverdage og weekender. Formatfunktionen bruges til at vise datoen i det nødvendige format.
Ugedag funktion
Funktionen Ugedag returnerer en heltalværdi, der repræsenterer ugedagen.
Syntaks
Ugedag (Date_Value, [First_Day_Of_Week])
Dato_værdi angiver datoværdien, som du vil finde ugedag for.
First_Day_Of_Week angiver, hvilken ugedag der skal betragtes som den første i ugen. Det tager en heltalværdi eller den værdi, der er valgt fra FirstDayOfWeek -opregningen som input. Hvis der ikke er angivet nogen værdi, bruges FirstDayOfWeek.Sunday som standardværdi.
Optællingsværdi |
Heltal værdi |
Bemærkninger |
FirstDayOfWeek.System |
0 |
Første ugedag angivet i systemindstillinger |
FirstDayOfWeek.Sunday |
1 |
Søndag (standard) |
FirstDayOfWeek.Manday |
2 |
Mandag |
FirstDayOfWeek.Tirsdag |
3 |
tirsdag |
FirstDayOfWeek.Wednesday |
4 |
onsdag |
FirstDayOfWeek.Torsdag |
5 |
torsdag |
FirstDayOfWeek.Friday |
6 |
Fredag |
FirstDayOfWeek. Lørdag |
7 |
lørdag |
Som det ses af makroens kode, har vi brugt Weekday (i, 2) til at angive mandag som første ugedag.
Format funktion
Formateringsfunktionen tager et datoudtryk som input og returnerer det som en formateret streng.
Syntaks for Format -funktion
Format (dato_værdi, format)
Dato_værdi angiver værdien af datatypen.
Format bruger strengværdi til at angive, hvilken type datoformat der kræves.
Følgende tabel definerer nogle populære tegn, som man kan bruge til at oprette nødvendige dato/klokkeslætformater:
Karakter |
Beskrivelse |
d |
viser dagen som et tal uden et førende nul (1 - 31) |
dd |
viser dagen som et tal med et førende nul (01 - 31) |
ddd |
viser dagen som en forkortelse (søn - lør) |
dddd |
viser dagen som et fuldt navn (søndag - lørdag) |
w |
viser ugedagen som et tal (1 for søndag til 7 for lørdag) |
ww |
viser årets uge som et tal (1 - 54) |
m |
viser måneden som et tal uden et førende nul (1 - 12) |
mm |
viser måneden som et tal med et førende nul (01 - 12) |
mmm |
viser måneden som en forkortelse (jan - dec) |
mmmm |
viser måneden som et helt månedsnavn (januar - december) |
q |
viser årets kvartal som et tal (1 - 4) |
y |
viser årets dag som et tal (1 - 366) |
åå |
viser året som et 2 -cifret tal (00 - 99) |
åååå |
viser året som et firecifret tal (100 - 9999) |
h |
viser timen som et tal uden førende nuller (0 - 23) |
hh |
viser timen som et tal med førende nuller (00 - 23) |
n |
viser minuttet som et tal uden førende nuller (0 - 59) |
nn |
viser minuttet som et tal med førende nuller (00 - 59) |
s |
viser det andet som et tal uden førende nuller (0 - 59) |
ss |
viser det andet som et tal med førende nuller (00 - 59) |
For at efterlade en tom række i slutningen af hver uge har vi tjekket søndage ved hjælp af hverdagsfunktion og øget værdien af variablen "Startrække" med 1, så den næste række forbliver tom.
Som det ses i makroens kode, har vi brugt funktionen Format to gange på forskellige måder. For det første har vi brugt Format (i, "ddd") for at få hverdagen og for det andet har vi brugt Format (i, "dd.mm.åå") for at få datoen i dd.mm.åååå -format.
Kode forklaring
Dim NewWorksheet som regneark
Indstil NewWorksheet = Worksheets.Add
Ovenstående kode bruges til at deklarere regnearkets objektnavn som "NewWorksheet". Arbejdsark. Tilføj metode bruges til at tilføje det nye regneark i regnearkssamlingen. Set sætning bruges til at initialisere det deklarerede objekt med det nyligt indsatte ark.
For i = StartDate Til EndDate
FOR loop bruges til at loop fra startdato til slutdato.
Hvis Ugedag (i, 2) <6 Så
IF -sætning bruges til at kontrollere tilstanden og udføre koden baseret på betingelsen. Ovenstående betingelse vil kontrollere værdiretur med funktionen Ugedag. Hvis det er mindre end 6, returnerer IF -tilstanden true, og koden inde i IF -sætningen udføres. Ellers springes det over.
Startrække = 1
Startende = Startrække + 1
StartingRow -variabel bruges til at bevæge sig gennem rækker på regnearket. Ved start initialiseres variablen til første række. Ved hver vellykket udførelse af IF -sætning øges variabelværdien med 1 og flytter til næste række i arket.
Celler (Startrække, 1)
Celleegenskab bruges til at referere til en bestemt celle på regnearket. Celler (row_number, column_number) kan bruges til at referere til enhver celle i regnearket ved at indtaste et bestemt rækkenummer og kolonnenummer som parametre. I koden Celler (Starterække, 1) angiver 1 den første kolonne, og variablen "Startrække" definerer rækkenummeret.
Man kan let forstå koderne, da jeg har inkluderet kommentarer sammen med koder i makroen.
Følg venligst nedenstående for koden
Valgmulighed Eksplicit underekstraktWeekdays () 'Deklaration af to variabler af datatypet Dim StartDate As Date, EndDate As Date' Deklarerende regnearksvariabel Dim NewWorksheet As Worksheet Dim StartRow, i As Long 'Hentning af startdato og slutdatoværdier fra regneark StartDate = Sheets ( "Makro"). Område ("J8"). Værdi EndDate = Sheets ("Makro"). Område ("J9"). Værdi 'Initialiserer startrækket for output StartRow = 1' Indsættelse af nyt regneark Indstil NewWorksheet = regneark. Tilføj til i = StartDate til EndDate 'Brug af Weekday -metoden til at kontrollere, om det er Ugedag eller uge og Hvis Ugedag (i, 2) <6 Derefter bruges' Indsætning af værdi på nyindsat regneark 'Formatmetode til formatering af datoværdien NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Opdaterer StartRow -variabelværdi for at flytte til næste række StartRow = StartRow + 1 End Hvis 'Indsætning af tom række til weekend Hvis Ugedag (i, 2) = 7 Derefter starter Start = StartRække + 1 Afslut hvis N ext i Set NewWorksheet = Intet slutter Sub
Hvis du kunne lide denne blog, kan du dele den med dine venner på Facebook. Du kan også følge os på Twitter og Facebook.
Vi vil meget gerne høre fra dig, lad os vide, hvordan vi kan forbedre vores arbejde og gøre det bedre for dig. Skriv til os på e -mail -stedet