Puoi ottenere facilmente quanti chiedi con una macro autoregistrata usando il seguente processo:
-sul foglio "Generale" imposti il filtro automatico alla colonna D, da D7 fino alla fine
-selezioni Foglio1
-avvii la registrazione di una nuova macro
-selezioni il foglio "Generale"
-duplichi il foglio: tasto dx sul tab col nome del foglio; scegli Sposta o copia; spunta Crea una copia; scegli "Prima del foglio... " -- "Foglio1"; conferma con Ok.
-rinomina il foglio appena creato come PIPPO
-imposta il filtro su colonna D affinche' visualizzi le date "prima di" e come data scrivi quella impostata in B3, oppure le date "dopo" e come data scrivi quella in B4. Su XL2016 (non ho sottomano XL2010) la procedura e': clicca sul filtro, scegli Filtri per data /Filtro personalizzato; la prima scelta sara' "E' prima di", metti la data; spunta OR e come seconda scelta "E' dopo", metti la data; completi con Ok
-le date così visualizzate sono quelle da eliminare: seleziona manualmente le righe visibili ed Eliminale
-infine elimina il filtro e visualizzerai le righe residue, che dovrebbero corrispondere a quanto richiesto
-interrompi la registrazione macro
Il codice cosi' ottenuto ha bisogno di qualche editing per funzionare; visualizza il codice della macro e poi:
a) tutte le righe che contengono ActiveWindow.LargeScroll oppure ActiveWindow.SmallScroll possono essere eliminate
b) trova la riga che assegna il nome PIPPO al foglio creato, e sostituisci la riga con
- Codice: Seleziona tutto
ActiveSheet.Name = Format(Range("B3").Value, "dd-mm-yyyy")
c) trova le righe che applicano il filtro automatico e sosttituisci con
- Codice: Seleziona tutto
ActiveSheet.Range("$D$7:$D$7000").AutoFilter Field:=1, Criteria1:= _
"<" & Format(Range("B3").Value, "yyyy-mm-dd"), Operator:=xlOr, Criteria2:=">=" & Format(1 + Range("B4").Value, "yyyy-mm-dd")
d) trova la riga che seleziona le righe excel da cancellare (a me e' uscito Rows("8:5574").Select) e sostituisci con
- Codice: Seleziona tutto
Range("A" & Range("A8:A7000").SpecialCells(xlCellTypeVisible)(1).Row).Resize(7000).EntireRow.Select
e) trova la riga che elimina il filtro (l'istruzione che termina con .AutoFilter Field:=1) e sostituisci con
- Codice: Seleziona tutto
ActiveSheet.Range("$D$7:$D$7000").AutoFilter Field:=1
f) infine, subito prima di End Sub aggiungi
- Codice: Seleziona tutto
Range("B8").Value = 1
Range("A8").Value = 1
g) potrebbe anche essere utile inserire in testa, subito dopo la riga che seleziona il foglio "Generale"
- Codice: Seleziona tutto
If Range("B3") = "" Or Range("B4") = "" Then Beep: Exit Sub
In questo modo la macro non si esegue se B3 o B4 non sono compilati
Per informazioni e suggerimenti su come registrare o editare una macro:
viewtopic.php?f=26&t=103893Prova e fai sapere