I den här artikeln kommer vi att skapa ett makro för att extrahera vardagarna mellan två datum.
I det här exemplet måste vi ange startdatum och slutdatum innan vi kör makrot. Makro väljer värdet för startdatum från cell J8 och slutdatum från cell J9. Efter att ha angett start- och slutdatum kan makrot köras genom att trycka på knappen "Skicka" eller genom att trycka på snabbtangenterna Alt + F8.
När makrot körs kommer det att returnera vardagar mellan två datum på ett nytt blad. Det nyligen infogade kalkylbladet innehåller vardagar i kolumn A, följt av respektive datum i kolumn B. Utdata i kolumn B kommer att vara i dd.mm.åå -format.
Varje vecka kommer att följas av en tom rad för att skilja mellan två på varandra följande veckor.
Logisk förklaring
I makrot har vi använt funktionen Veckodag för att skilja mellan vardagar och helger. Formatfunktionen används för att visa datumet i önskat format.
Veckodagsfunktion
Funktionen Veckodag returnerar ett heltal som representerar veckodagen.
Syntax
Vardag (Date_Value, [First_Day_Of_Week])
Date_Value anger datumvärdet för vilket du vill hitta veckodagen.
First_Day_Of_Week anger vilken veckodag som ska betraktas som den första dagen i veckan. Det tar ett heltal eller det värde som valts från FirstDayOfWeek -uppräkningen som inmatning. Om inget värde har angetts används FirstDayOfWeek.Sunday som standardvärde.
Uppräkningsvärde |
Integer värde |
Anmärkningar |
FirstDayOfWeek.System |
0 |
Första veckodagen specificerad i systeminställningar |
FirstDayOfWeek.Sunday |
1 |
Söndag (standard) |
FirstDayOfWeek.Måndag |
2 |
Måndag |
FirstDayOfWeek.Tisday |
3 |
Tisdag |
FirstDayOfWeek.Wednesday |
4 |
Onsdag |
FirstDayOfWeek.Torsdag |
5 |
Torsdag |
FirstDayOfWeek.Friday |
6 |
fredag |
FirstDayOfWeek.Saturday |
7 |
Lördag |
Som framgår av makrokoden har vi använt Weekday (i, 2) för att ange måndag som första dagen i veckan.
Formatfunktion
Formateringsfunktionen tar ett datumuttryck som inmatning och returnerar det som en formaterad sträng.
Syntax för funktionen Format
Format (Date_Value, format)
Date_Value anger värdet för datatyp.
Formatera använder strängvärde för att ange vilken typ av datumformat som krävs.
Följande tabell definierar några populära karaktärer som man kan använda för att skapa nödvändiga datum/tid -format:
Karaktär |
Beskrivning |
d |
visar dagen som ett tal utan en inledande nolla (1 - 31) |
dd |
visar dagen som ett tal med en ledande nolla (01 - 31) |
ddd |
visar dagen som en förkortning (sön - lör) |
dddd |
visar dagen som ett fullständigt namn (söndag - lördag) |
w |
visar veckodagen som ett nummer (1 för söndag till 7 för lördag) |
ww |
visar årets vecka som ett tal (1 - 54) |
m |
visar månaden som ett tal utan en inledande nolla (1 - 12) |
mm |
visar månaden som ett tal med en ledande nolla (01 - 12) |
mmm |
visar månaden som en förkortning (jan - dec) |
Mmmm |
visar månaden som ett fullständigt månadsnamn (januari - december) |
q |
visar årets kvartal som ett tal (1 - 4) |
y |
visar årets dag som ett tal (1 - 366) |
åå |
visar året som ett tvåsiffrigt tal (00 - 99) |
åååå |
visar året som ett fyrsiffrigt tal (100 - 9999) |
h |
visar timmen som ett nummer utan inledande nollor (0 - 23) |
hh |
visar timmen som ett nummer med ledande nollor (00 - 23) |
n |
visar minuten som ett nummer utan nollor (0 - 59) |
nn |
visar minuten som ett nummer med ledande nollor (00 - 59) |
s |
visar den andra som ett tal utan ledande nollor (0 - 59) |
ss |
visar den andra som ett nummer med ledande nollor (00 - 59) |
För att lämna en tom rad i slutet av varje vecka har vi kontrollerat för söndagar med hjälp av vardagsfunktionen och ökat värdet för "Startande rad" -variabel med 1 så att nästa rad förblir tom.
Som framgår av makrokoden har vi använt funktionen Format två gånger på olika sätt. För det första har vi använt Format (i, "ddd") för att få veckodagen och för det andra har vi använt Format (i, "dd.mm.åå") för att få datumet i dd.mm.åååå -format.
Kodförklaring
Dim NewWorksheet Som arbetsblad
Ange NewWorksheet = Worksheets.Add
Ovanstående kod används för att deklarera kalkylbladets objektnamn som "NewWorksheet". Arbetsblad.Add -metod används för att lägga till det nya kalkylbladet i arbetsbladssamlingen. Set -sats används för att initiera det deklarerade objektet med det nyligen infogade arket.
För i = StartDate Till EndDate
FOR loop används för att loopa från startdatum till slutdatum.
Om vardag (i, 2) <6 Då
IF -sats används för att kontrollera villkoret och köra koden baserat på villkoret. Ovanstående villkor kontrollerar värdeåtergång med funktionen Veckodag. Om det är mindre än 6 returnerar IF -villkoret true och koden inuti IF -satsen körs. Annars hoppas det över.
Startrad = 1
StartingRow = StartRow + 1
StartingRow -variabel används för att flytta genom rader i kalkylbladet. Vid start initieras variabeln till första raden. Vid varje lyckad körning av IF -satsen ökas variabelvärdet med 1 och går till nästa rad i arket.
Celler (Startrad, 1)
Cells -egenskap används för att referera till en viss cell i kalkylbladet. Celler (radnummer, kolumnnummer) kan användas för att referera till vilken cell som helst i kalkylbladet genom att ange ett visst radnummer och kolumnnummer som parametrar. I koden Cells (StartingRow, 1) anger 1 den första kolumnen och variabeln "StartRow" definierar radnumret.
Man kan enkelt förstå koder eftersom jag har inkluderat kommentarer tillsammans med koder i makrot.
Följ koden nedan
Alternativ Explicit Sub ExtractWeekdays () 'Declaring two variables of Date data type Dim StartDate As Date, EndDate As Date' Declaring worksheet variable Dim NewWorksheet As Worksheet Dim StartRow, i As Long 'Skaffa startdatum och slutdatum värden från kalkylblad StartDate = Sheets ( "Makro"). Område ("J8"). Värde EndDate = Sheets ("Makro"). Område ("J9"). Värde 'Initierar startradnumret för utmatning StartRow = 1' Infoga nytt kalkylblad Ställ in NewWorksheet = Arbetsblad. Lägg till för i = StartDate till EndDate 'Använd metoden Weekday för att kontrollera om det är Weekday eller weekand If Weekday (i, 2) <6 Sedan används' Infoga värde på nyinsatt kalkylblad 'Formatmetod för att formatera datumvärdet NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.åå") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Uppdaterar StartRow -variabelvärdet för att gå till nästa rad StartRow = StartRow + 1 End Om 'Infogar tom rad för helg Om veckodag (i, 2) = 7 Sedan startar rad = startrad + 1 slutar om N ext i Set NewWorksheet = Nothing End Sub
Om du gillade den här bloggen, dela den med dina vänner på Facebook. Du kan också följa oss på Twitter och Facebook.
Vi vill gärna höra från dig, låt oss veta hur vi kan förbättra vårt arbete och göra det bättre för dig. Skriv till oss på e -postwebbplatsen