Inserire i giorni della settimana lun – ven in un foglio di lavoro utilizzando VBA in Microsoft Excel
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.
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.
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]