In questo articolo creeremo una macro per estrarre i giorni feriali tra due date.

In questo esempio, dobbiamo specificare la data di inizio e la data di fine prima di eseguire la macro. La macro seleziona il valore della data di inizio dalla cella J8 e il valore della data di fine dalla cella J9. Dopo aver specificato la data di inizio e di fine, la macro può essere eseguita premendo il pulsante “Invia” o premendo i tasti di scelta rapida Alt + F8.

ArrowMainSheet

Quando si esegue la macro, restituirà i giorni feriali tra due date su un nuovo foglio. Il foglio di lavoro appena inserito contiene i giorni della settimana nella colonna A, seguiti dalla rispettiva data nella colonna B. La data di output nella colonna B sarà nel formato gg.mm.aa.

Ogni settimana sarà seguita da una riga vuota per distinguere tra due settimane consecutive.

ArrowAfterRunningMacro

Spiegazione logica

Nella macro abbiamo utilizzato la funzione Weekday per distinguere tra giorni feriali e fine settimana. La funzione formato viene utilizzata per visualizzare la data nel formato richiesto.

Funzione giorno della settimana

La funzione Weekday restituisce un valore intero che rappresenta il giorno della settimana.

Sintassi

Weekday (Date_Value, [First_Day_Of_Week])

Date_Value specifica il valore della data per il quale si desidera trovare il giorno della settimana.

First_Day_Of_Week specifica quale giorno della settimana deve essere considerato il primo giorno della settimana. Richiede un valore intero o il valore scelto dall’enumerazione FirstDayOfWeek come input. Se non viene specificato alcun valore, viene utilizzato FirstDayOfWeek.Sunday come valore predefinito.

Enumeration value

Integer value

Remarks

FirstDayOfWeek.System

0

First day of week specified in system

settings

FirstDayOfWeek.Sunday

1

Sunday (default)

FirstDayOfWeek.Monday

2

Monday

FirstDayOfWeek.Tuesday

3

Tuesday

FirstDayOfWeek.Wednesday

4

Wednesday

FirstDayOfWeek.Thursday

5

Thursday

FirstDayOfWeek.Friday

6

Friday

FirstDayOfWeek.Saturday

7

Saturday

Come visto dal codice della macro, abbiamo usato Weekday (i, 2) per specificare lunedì come primo giorno della settimana.

Funzione di formattazione

La funzione Format accetta un’espressione di data come input e la restituisce come stringa formattata.

Sintassi della funzione Format

Formato (Date_Value, format)

Date_Value specifica il valore del tipo di dati data.

Il formato utilizza un valore stringa per specificare il tipo di formato della data richiesto.

La tabella seguente definisce alcuni caratteri popolari che è possibile utilizzare per creare i formati di data / ora richiesti:

Character

Description

d

displays the day as a number without a leading zero (1–31)

dd

displays the day as a number with a leading zero (01–31)

ddd

displays the day as an abbreviation (Sun–Sat)

dddd

displays the day as a full name (Sunday–Saturday)

w

displays the day of the week as a number (1 for Sunday through 7 for

Saturday)

ww

displays the week of the year as a number (1–54)

m

displays the month as a number without a leading zero (1–12)

mm

displays the month as a number with a leading zero (01–12)

mmm

displays the month as an abbreviation (Jan–dec)

mmmm

displays the month as a full month name (January–december)

q

displays the quarter of the year as a number (1–4)

y

displays the day of the year as a number (1–366)

yy

displays the year as a 2-digit number (00–99)

yyyy

displays the year as a 4-digit number (100–9999)

h

displays the hour as a number without leading zeros (0–23)

hh

displays the hour as a number with leading zeros (00–23)

n

displays the minute as a number without leading zeros (0–59)

nn

displays the minute as a number with leading zeros (00–59)

s

displays the second as a number without leading zeros (0–59)

ss

displays the second as a number with leading zeros (00–59)

Per lasciare una riga vuota alla fine di ogni settimana, abbiamo controllato le domeniche utilizzando la funzione giorno della settimana e incrementato il valore della variabile “StartingRow” di 1 in modo che la riga successiva rimanga vuota.

Come visto nel codice della macro, abbiamo utilizzato la funzione Format due volte in modi diversi. In primo luogo, abbiamo utilizzato Format (i, “ddd”) per ottenere il giorno della settimana e, in secondo luogo, abbiamo utilizzato Format (i, “dd.mm.yy”) per ottenere la data in formato gg.mm.yyyy.

Spiegazione del codice

Dim NewWorksheet As Worksheet Set NewWorksheet = Worksheets.Add Il codice sopra viene utilizzato per dichiarare il nome dell’oggetto foglio di lavoro come “NewWorksheet”.

Il metodo Worksheets.Add viene utilizzato per aggiungere il nuovo foglio di lavoro nella raccolta di fogli di lavoro. L’istruzione Set viene utilizzata per inizializzare l’oggetto dichiarato con il foglio appena inserito.

For i = StartDate To EndDate FOR loop viene utilizzato per il ciclo dalla data di inizio alla data di fine.

If Weekday (i, 2) <6 L’istruzione IF viene utilizzata per verificare la condizione ed eseguire il codice in base alla condizione. La condizione precedente controllerà il valore restituito dalla funzione Weekday. Se è minore di 6, la condizione IF restituisce true e il codice all’interno dell’istruzione IF verrà eseguito. Altrimenti verrà saltato.

StartingRow = 1 StartingRow = StartingRow + 1 La variabile StartingRow viene utilizzata per spostarsi tra le righe del foglio di lavoro. All’inizio, la variabile viene inizializzata sulla prima riga. Ad ogni esecuzione riuscita dell’istruzione IF, il valore della variabile viene incrementato di 1, spostandosi alla riga successiva del foglio.

Cells (StartingRow, 1)

La proprietà Cells viene utilizzata per fare riferimento a una particolare cella del foglio di lavoro.

Le celle (row_number, column_number) possono essere utilizzate per fare riferimento a qualsiasi cella del foglio di lavoro inserendo un numero di riga e un numero di colonna particolari come parametri. Nel codice Cells (StartingRow, 1), 1 specifica la prima colonna e la variabile “StartingRow” definisce il numero di riga.

Si possono facilmente comprendere i codici poiché ho incluso commenti insieme ai codici nella macro.

Segui sotto per il codice

Option 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 StartingRow, i As Long



'Getting start date and end date values from worksheet

StartDate = Sheets("Macro").Range("J8").Value

EndDate = Sheets("Macro").Range("J9").Value

'Initializing the starting row number for output

StartingRow = 1

'Inserting new worksheet

Set NewWorksheet = Worksheets.Add

For i = StartDate To EndDate



'Using Weekday method to check whether it is Weekday or weekand

If Weekday(i, 2) < 6 Then



'Inserting value on newly inserted worksheet

'Format method is used for formatting the date value

NewWorksheet.Cells(StartingRow, 2) = Format(i, "dd.mm.yy")

NewWorksheet.Cells(StartingRow, 1) = Format(i, "ddd")



'Updating StartingRow variable value for moving to next row

StartingRow = StartingRow + 1

End If



'Inserting blank row for weekend

If Weekday(i, 2) = 7 Then

StartingRow = StartingRow + 1

End If

Next i

Set NewWorksheet = Nothing

End Sub

Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook e Facebook.

Ci piacerebbe sentire la tua opinione, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici a [email protected]