Creare fogli giorno di un mese senza fine settimana e festivi utilizzando VBA
In questo articolo, creeremo una macro per creare un foglio per ogni giorno della settimana per il mese specificato dell’anno specificato escludendo tutte le date specificate nell’elenco delle festività.
Prima di eseguire la macro, sono necessari tre input. È necessario specificare il numero del mese nella cella J10, l’anno nella cella J11 e specificare l’elenco delle date delle festività nell’intervallo B16: B26.
Dopo aver specificato i valori di input, fare clic sul pulsante di invio per eseguire la macro.
Questa macro inserirà un nuovo foglio per ogni giorno della settimana per il mese specificato escluse le date specificate nell’elenco delle festività.
Spiegazione logica
In questa macro, abbiamo utilizzato la funzione DateSerial per trovare l’ultima data del mese specificato. Abbiamo utilizzato FOR Loop per eseguire il ciclo dalla data di inizio del mese all’ultima data del mese. Abbiamo utilizzato la funzione Trova per scoprire se la data utilizzata esiste nell’elenco delle festività specificato.
[_GoBack] # La funzione Weekday viene utilizzata insieme all’istruzione If per verificare se una data è un giorno della settimana o un fine settimana. L’istruzione If inserirà un nuovo foglio solo se la data è un giorno della settimana e non esiste nell’elenco delle festività. Come si può vedere nello screenshot qui sopra, il foglio del 6 ^ ^ dicembre non viene creato, in quanto il 6 ^ ^ dicembre è presente nell’elenco delle festività.
Segui sotto per il codice
Option Explicit Sub MonthApply() 'Declaring variables Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'Disabling the screen updates Application.ScreenUpdating = False With Worksheets("Main") 'Getting month and year from cell J10 and J11 from "Main" sheet MonthNo = .Range("J10").Value YearNo = .Range("J11").Value 'Deriving start and end date StartDate = DateSerial(YearNo, MonthNo, 1) EndDate = DateSerial(YearNo, MonthNo + 1, 0) 'Looping through all the dates in the specified month For DVariable = StartDate To EndDate 'Finding if date is marked as holiday Set RngFind = .Range("B16:B26").Find(DVariable) 'Checking whether date is holiday, weekend or weekday If RngFind Is Nothing And Weekday(DVariable, 2) < 6 Then 'Inserting new sheet after the last worksheet in the workbook Worksheets.Add after:=Worksheets(Worksheets.Count) 'Renaming the active sheet ActiveSheet.Name = Format(DVariable, "dd.mm.yy") End If Next DVariable .Select End With Application.ScreenUpdating = True 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]