La macro che hai adottato usa il metodo "Find" per trovare la cella che contiene il flag R, poi per essere certo di trovare "la cella successiva" azzera il flag... Grossolano ma efficace; pero' anche invasivo perche' modifica i dati di partenza rendendo impossibile il tracciamento dei risultati.
La sequente macro e' derivata dall' esempio riportato dall' help on line del vba (una vera miniera di informazioni), alla voce "Metodo Find":
- Codice: Seleziona tutto
sub CopiaR()
NOMEFOGLIO1 = "FOGLIO1" 'nome del foglio con i dati da copiare
NOMEFOGLIO3 = "FOGLIO3" 'nome del foglio dove copio i dati
'
Sheets(NOMEFOGLIO3).Cells.Clear
'
With Worksheets(NOMEFOGLIO1).Range("T1:T2000")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.entirerow.copy Destination:=Sheets(NOMEFOGLIO3).cells(Rows.count,1).End(xlUp).offset(1,0)
' c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
'
End Sub
Purtroppo non capisco cosa c' entri la col T con i tuoi dati; d' altra parte tu hai detto "
in un foglio excel avendo l'anagrafica ,la classe, la frequenza estrarre gli alunni della stessa classe in un foglio e solo che frequenta.", cioe' hai bisogno di piu' di un solo criterio di ricerca.
Di conseguenza il mio suggerimento e' di valutare l' uso del filtro automatico:
-seleziona le colonne D ed E, e applica il filtro automatico (Menu /Dati /Filtro /Filtro automatico)
-scegli la classe dalla prima freccina visualizzata in D1, poi scegli SI dalla seconda freccina
Se quello che ti viene visualizzato e' quello che vuoi ottenere, considerando che avrai in tutto una trentina di classi potresti filtrare manualmente per ogni classe e copiare i risultati in un nuovo foglio; in 30 minuti avresti finito, salvo possibili errori manuali.
L' alternativa e' farlo con una macro autoregistrata:
-elimina i filtri eventualmente impostati
-PER SEMPLICITA' elimina le prime due righe, in modo che le intestazioni di colonna siano in riga 1
-avvia la registrazione macro (Menu /Strumenti /Macro /Registra nuova macro)
-sul foglio di partenza crea un elenco unico di valori di col D, usando Filtro Avanzato, mettendolo ad esempio da M1 in giu' (Seleziona col D, Menu /Dati /Filtro /Filtro avanzato; spunta Copia in altra posizione, spunta Copia univoca, come posizione di copia indica M1, Ok)
-imposti il filtro automatico sulle colonne D ed E
-scegli nella casella di filtro di col D un valore a caso, diciamo 3A, e scegli SI nel filtro di col E
-selezioni e copi le colonne che ti servono
-inserisci un nuovo foglio di lavoro
-cambia il nome del foglio in 3A
-seleziona A1 e fai Incolla (oppure Incolla speciale /Valori, o Valori e poi Formati)
-torna al foglio di partenza e applichi il filtro su "(tutto)"
-ferma la registrazione della macro
A questo punto devi modificare il codice prodotto affinche':
-faccia parte di un cicclo che parte da M2 e si ripete per le celle sottostanti fintanto che il valore non sia nullo
-prenda il valore di filtro dalla cella M2 e sottostanti
-idem per il nome del foglio creato.
Se non riesci allora posta ancora inserendo il codice della macro da te registrata.
Ciao