I denne artikkelen vil vi lage en makro for å trekke ut ukedager mellom to datoer.
I dette eksemplet må vi spesifisere startdato og sluttdato før vi kjører makroen. Makro velger verdien for startdato fra celle J8 og sluttdatoverdi fra celle J9. Etter å ha angitt start- og sluttdato, kan makroen utføres ved å trykke på "Send" -knappen eller trykke på hurtigtaster Alt + F8.
Når du kjører makroen, vil den returnere hverdager mellom to datoer på et nytt ark. Det nylig innsatte regnearket inneholder hverdager i kolonne A, etterfulgt av den respektive datoen i kolonne B. Utdatoen i kolonne B vil være i dd.mm.åå -format.
Hver uke vil bli fulgt av en tom rad for å skille mellom to påfølgende uker.
Logisk forklaring
I makroen har vi brukt Weekday -funksjonen til å skille mellom hverdager og helger. Formatfunksjonen brukes til å vise datoen i det nødvendige formatet.
Ukedagsfunksjon
Ukedag -funksjonen returnerer en heltallverdi som representerer ukedagen.
Syntaks
Ukedag (Date_Value, [First_Day_Of_Week])
Dato_verdi angir datoverdien du vil finne ukedagen for.
First_Day_Of_Week angir hvilken ukedag som skal regnes som den første dagen i uken. Den tar en heltallsverdi eller verdien valgt fra FirstDayOfWeek -oppregningen som inndata. Hvis ingen verdi er angitt, brukes FirstDayOfWeek.Sunday som standardverdi.
Oppregningsverdi |
Heltall verdi |
Merknader |
FirstDayOfWeek.System |
0 |
Første ukedag spesifisert i systeminnstillinger |
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 |
Sett fra makrokoden har vi brukt Weekday (i, 2) til å spesifisere mandag som første ukedag.
Formatfunksjon
Format -funksjonen tar et datouttrykk som inndata og returnerer det som en formatert streng.
Syntaks for Format -funksjon
Format (dato_verdi, format)
Dato_verdi angir verdien av datatypen dato.
Format bruker strengverdi til å angi hvilken type datoformat som kreves.
Tabellen nedenfor definerer noen populære karakterer som man kan bruke til å lage nødvendige dato/klokkeslettformater:
Karakter |
Beskrivelse |
d |
viser dagen som et tall uten en ledende null (1 - 31) |
dd |
viser dagen som et tall med et ledende nullpunkt (01 - 31) |
ddd |
viser dagen som en forkortelse (søn - lør) |
dddd |
viser dagen som et fullt navn (søndag - lørdag) |
w |
viser ukedagen som et tall (1 for søndag til 7 for lørdag) |
ww |
viser uken i året som et tall (1 - 54) |
m |
viser måneden som et tall uten ledende null (1 - 12) |
mm |
viser måneden som et tall med en ledende null (01 - 12) |
mmm |
viser måneden som en forkortelse (jan - des) |
mmmm |
viser måneden som et helmånedsnavn (januar - desember) |
q |
viser kvartalet som et tall (1 - 4) |
y |
viser årets dag som et tall (1 - 366) |
åå |
viser året som et tosifret tall (00 - 99) |
åååå |
viser året som et firesifret tall (100 - 9999) |
h |
viser timen som et tall uten ledende nuller (0 - 23) |
hh |
viser timen som et tall med ledende nuller (00 - 23) |
n |
viser minuttet som et tall uten ledende nuller (0 - 59) |
nn |
viser minuttet som et tall med ledende nuller (00 - 59) |
s |
viser den andre som et tall uten ledende nuller (0 - 59) |
ss |
viser den andre som et tall med ledende nuller (00 - 59) |
For å forlate en tom rad på slutten av hver uke, har vi sjekket for søndager ved å bruke ukedagsfunksjonen og øke verdien til "Startende" variabel med 1 slik at neste rad forblir tom.
Som sett i makroens kode, har vi brukt Format -funksjonen to ganger på forskjellige måter. For det første har vi brukt Format (i, "ddd") for å få ukedagen og for det andre har vi brukt Format (i, "dd.mm.åå") for å få datoen i dd.mm.åååå -format.
Kode forklaring
Dim NewWorksheet Som regneark
Sett NewWorksheet = Worksheets.Add
Koden ovenfor brukes til å deklarere regnearkobjektnavnet som "NewWorksheet". Arbeidsark. Legg til metode brukes for å legge til det nye regnearket i regnearksamlingen. Set -setning brukes til å initialisere det deklarerte objektet med det nylig innsatte arket.
For i = StartDate Til EndDate
FOR loop brukes til å sløyfe fra startdato til sluttdato.
Hvis Ukedag (i, 2) <6 Da
IF -setning brukes til å kontrollere tilstanden og utføre koden basert på tilstanden. Ovenstående betingelse vil kontrollere verdien retur med funksjonen Weekday. Hvis det er mindre enn 6, returnerer IF -tilstanden true og koden inne i IF -setningen vil utføres. Ellers blir det hoppet over.
Starterekke = 1
StartingRow = StartRow + 1
StartingRow -variabelen brukes til å bevege seg gjennom rader i regnearket. Ved start initialiseres variabelen til første rad. For hver vellykkede utførelse av IF -setningen økes variabelverdien med 1, og går til neste rad i arket.
Celler (StartRekke, 1)
Cells -egenskap brukes til å referere til en bestemt celle i regnearket. Celler (radnummer, kolonnummer) kan brukes til å referere til hvilken som helst celle i regnearket ved å angi et bestemt radnummer og kolonnummer som parametere. I koden Cells (StartingRow, 1) angir 1 den første kolonnen og variabelen “StartRow” definerer radnummeret.
Man kan lett forstå kodene da jeg har inkludert kommentarer sammen med koder i makroen.
Følg koden nedenfor
Alternativ Eksplisitt subekstraktWeekdays () 'Deklarere to variabler av datatypet Dim StartDate As Date, EndDate As Date' Deklarere regnearksvariabel Dim NewWorksheet As Worksheet Dim StartRow, i As Long 'Få startdato og sluttdatoverdier fra regnearket StartDate = Sheets ( "Makro"). Område ("J8"). Verdi EndDate = Sheets ("Makro"). Område ("J9"). Verdi 'Initialiserer startradenummeret for utdata StartRow = 1' Sette inn nytt regneark Sett nytt arbeidsark = regneark. Add For i = StartDate To EndDate 'Ved å bruke Weekday -metoden for å sjekke om det er Weekday eller weekand If Weekday (i, 2) <6 Deretter brukes' Sett inn verdi på nylig innsatt regneark 'Formatmetode for formatering av datoverdien NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Oppdaterer StartRow -variabelverdi for å gå til neste rad StartingRow = StartRow + 1 End Hvis 'Setter inn blank rad for helgen Hvis ukedag (i, 2) = 7 Da starter raden = starter raden + 1 slutter hvis N ext i Set NewWorksheet = Nothing End Sub
Hvis du likte denne bloggen, del den med vennene dine på Facebook. Du kan også følge oss på Twitter og Facebook.
Vi vil gjerne høre fra deg, gi oss beskjed om hvordan vi kan forbedre arbeidet vårt og gjøre det bedre for deg. Skriv til oss på e -post