In questo articolo creeremo una macro per estrarre i giorni della settimana tra due date.
In questo esempio, dobbiamo specificare la data di inizio e la data di fine prima di eseguire la macro. La macro preleva 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.
Eseguendo la macro, restituirà i giorni della settimana 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 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
Giorno della settimana (Valore_data, [Primo_giorno_della_settimana])
Date_Value specifica il valore della data per cui si desidera trovare il giorno della settimana.
Primo_giorno_della_settimana specifica quale giorno della settimana deve essere considerato come primo giorno della settimana. Prende 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.
Valore di enumerazione |
Valore intero |
Osservazioni |
Primo giorno della settimana.Sistema |
0 |
Primo giorno della settimana specificato nelle impostazioni di sistema |
Primogiornodellasettimana.Domenica |
1 |
domenica (predefinito) |
Primogiorno della settimana.Lunedì |
2 |
lunedì |
Primogiornodellasettimana.Martedì |
3 |
Martedì |
Primogiorno della settimana.Mercoledì |
4 |
mercoledì |
Primogiornodellasettimana.giovedì |
5 |
giovedi |
PrimoGiornodellaSettimana.Venerdì |
6 |
venerdì |
Primogiorno della settimana.Sabato |
7 |
il sabato |
Come si vede dal codice della macro, abbiamo utilizzato Weekday(i, 2) per specificare lunedì come primo giorno della settimana.
Funzione formato
La funzione Format accetta un'espressione di data come input e la restituisce come stringa formattata.
Sintassi della funzione Formato
Formato (Valore_data, formato)
Date_Value specifica il valore del tipo di dati data.
Formato utilizza il valore stringa per specificare il tipo di formato della data richiesto.
La seguente tabella definisce alcuni caratteri popolari che è possibile utilizzare per creare i formati di data/ora richiesti:
Carattere |
Descrizione |
D |
visualizza il giorno come un numero senza zero iniziale (1 - 31) |
dd |
visualizza il giorno come un numero con uno zero iniziale (01 - 31) |
ddd |
visualizza il giorno come abbreviazione (dom - sab) |
dddd |
visualizza il giorno come nome completo (domenica - sabato) |
w |
visualizza il giorno della settimana come numero (da 1 per domenica a 7 per sabato) |
ww |
visualizza la settimana dell'anno come un numero (1 - 54) |
m |
visualizza il mese come numero senza zero iniziale (1 - 12) |
mm |
visualizza il mese come numero con uno zero iniziale (01 - 12) |
mmm |
visualizza il mese come abbreviazione (gen - dic) |
mmmm |
visualizza il mese come nome completo del mese (gennaio - dicembre) |
Q |
visualizza il trimestre dell'anno come un numero (1 - 4) |
sì |
visualizza il giorno dell'anno come numero (1 - 366) |
yy |
visualizza l'anno come numero a 2 cifre (00 - 99) |
aaaa |
visualizza l'anno come numero a 4 cifre (100 - 9999) |
h |
visualizza l'ora come un numero senza zeri iniziali (0 - 23) |
hh |
visualizza l'ora come un numero con zeri iniziali (00 - 23) |
n |
visualizza i minuti come un numero senza zeri iniziali (0 - 59) |
nn |
visualizza i minuti come un numero con zeri iniziali (00 - 59) |
S |
visualizza il secondo come numero senza zeri iniziali (0 - 59) |
ss |
visualizza il secondo come numero con zeri iniziali (00 - 59) |
Per lasciare una riga vuota alla fine di ogni settimana, abbiamo controllato per le domeniche utilizzando la funzione dei giorni feriali 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 nel formato gg.mm.aaaa.
Spiegazione del codice
Dim NewWorksheet come foglio di lavoro
Imposta NewWorksheet = Fogli di lavoro.Aggiungi
Il codice sopra viene utilizzato per dichiarare il nome dell'oggetto Foglio di lavoro come "Nuovo foglio di lavoro". Il metodo Worksheets.Add viene utilizzato per aggiungere il nuovo foglio di lavoro nella raccolta Worksheets. L'istruzione Set viene utilizzata per inizializzare l'oggetto dichiarato con il foglio appena inserito.
Per i = DataInizio a DataFine
Il ciclo FOR viene utilizzato per eseguire il ciclo dalla data di inizio alla data di fine.
Se Giorno della settimana(i, 2) < 6 Allora
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 è inferiore a 6, la condizione IF restituisce true e verrà eseguito il codice all'interno dell'istruzione IF. In caso contrario, verrà saltato.
Riga iniziale = 1
RigaInizio = RigaInizio + 1
La variabile StartingRow viene utilizzata per spostarsi tra le righe del foglio di lavoro. All'inizio, la variabile viene inizializzata sulla prima riga. Con ogni esecuzione riuscita dell'istruzione IF, il valore della variabile viene incrementato di 1, passando alla riga successiva nel foglio.
Celle (riga iniziale, 1)
La proprietà Cells viene utilizzata per fare riferimento a una particolare cella del foglio di lavoro. Le celle (numero_riga, numero_colonna) possono essere utilizzate per fare riferimento a qualsiasi cella del foglio di lavoro immettendo un particolare numero di riga e numero di colonna 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.
Si prega di seguire sotto per il codice
Option Explicit Sub ExtractWeekdays() 'Dichiarazione di due variabili del tipo di dati Date Dim StartDate As Date, EndDate As Date 'Dichiarazione variabile del foglio di lavoro Dim NewWorksheet As Worksheet Dim StartingRow, i As Long 'Ottenimento dei valori della data di inizio e della data di fine dal foglio di lavoro StartDate = Sheets( "Macro").Range("J8").Value EndDate = Sheets("Macro").Range("J9").Value 'Inizializzazione del numero di riga iniziale per l'output StartingRow = 1 'Inserimento nuovo foglio di lavoro Set NewWorksheet = Worksheets. Aggiungi per i = StartDate To EndDate 'Utilizzo del metodo Weekday per verificare se è Weekday o weekand If Weekday(i, 2) < 6 Then 'Inserimento valore sul foglio di lavoro appena inserito 'Il metodo Format viene utilizzato per formattare il valore della data NewWorksheet.Cells( StartingRow, 2) = Format(i, "dd.mm.yy") NewWorksheet.Cells(StartingRow, 1) = Format(i, "ddd") 'Aggiornamento del valore della variabile StartingRow per passare alla riga successiva StartingRow = StartingRow + 1 End If 'Inserimento riga vuota per il fine settimana If Weekday(i, 2) = 7 Then StartingRow = StartingRow + 1 End If N ext i Set NewWorksheet = Nothing End Sub
Se ti è piaciuto questo blog, condividilo con i tuoi amici su Facebook. Inoltre, puoi seguirci su Twitter e Facebook.
Ci piacerebbe avere tue notizie, facci sapere come possiamo migliorare il nostro lavoro e renderlo migliore per te. Scrivici al sito di posta elettronica