Crea fogli giornalieri di un mese senza fine settimana e festività utilizzando VBA

Anonim

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. Dobbiamo 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.

La funzione Weekday viene utilizzata insieme all'istruzione If per verificare se una data è un giorno della settimana o un fine settimana. Se l'istruzione 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, foglio per 6ns Dicembre non viene creato, come 6ns Dicembre è presente nell'elenco delle festività.

Si prega di seguire sotto per il codice

 Option Explicit Sub MonthApply() 'Dichiarazione delle variabili Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date 'Disabilitazione degli aggiornamenti dello schermo Application.ScreenUpdating = False With Worksheets("Main") 'Ottenimento del mese e anno dalla cella J10 e J11 dal foglio "Principale" MonthNo = .Range("J10").Value YearNo = .Range("J11").Value 'Date di inizio e fine derivate StartDate = DateSerial(YearNo, MonthNo, 1) EndDate = DateSerial(YearNo, MonthNo + 1, 0) 'Ricerca di tutte le date nel mese specificato For DVariable = StartDate To EndDate 'Ricerca se la data è contrassegnata come festività Set RngFind = .Range("B16:B26").Find( DVariable) 'Controllo se la data è festivo, fine settimana o giorno feriale If RngFind Is Nothing And Weekday (DVariable, 2) < 6 Then 'Inserimento nuovo foglio dopo l'ultimo foglio di lavoro nella cartella di lavoro Worksheets.Add after:=Worksheets(Worksheets.Count) ' Rinominare il foglio attivo ActiveSheet.Name = Format(DVariable, "dd.mm.yy") End If Next DVariable .Select End W ith Application.ScreenUpdating = True 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