Condividi:        

[excel] Filtrare dati tramite macro

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[excel] Filtrare dati tramite macro

Postdi Kessi » 06/12/07 15:40

Buongiorno, sono una novellina del forum..e di VBA!
Ho un problema a livello concettuale..quindi non so proprio quale metodo utilizzare per risolvere.
Cerco di spiegarlo:

Ho una tabella su un foglio xls ke contiene molti dati..le info ke + mi interessano sono -> Numero mandato (ce ne sono moltissimi), Opera e Totale.
Dovrei creare un piccola macro ke mi permetta di inserire il numero di mandato ke m'interessa..a questo punto tutti i dati ke corrispondono a quel numero vengono visualizzati su un'altra tabella (in pratica è la stessa cosa ke fa un filtro..ma io lo voglio fare manualmente con una macro..questo xké poi devo fare tutte delle somme e calcoli ke il filtro non mi permetterebbe).

C'è un sistema x scorrere un intera colonna..cercando il numero corrispondente (inserito per esempio tramite InputBox) e ke mi riporti le corrisponmdenze su di un altro foglio di lavoro?!
Oppure qualcuno sa indicarmi una via + breve x ottenere lo stesso risultato?!

Spero di essermi spiegata..
Grazie e saluti..
303% ChAoS !
Kessi
Newbie
 
Post: 3
Iscritto il: 06/12/07 15:33

Sponsor
 

Postdi Anthony47 » 07/12/07 00:55

Ciao Kessi e benvenuta nel forum.
Intanto sui dati filtrati puoi fare tantissime operazioni tramite la funzione SUBTOTALE; es
Codice: Seleziona tutto
=SUBTOTALE(9;A:A)
fa la somma tra tutte le celle filtrate (quelle visibili), ma se vedi l’ help on line noterai che puoi fare molte altre cose:medie, conteggi, min/max, ...

Se invece vuoi proprio filtrare e copiare in altro foglio, puoi usare queste istruzioni:

Codice: Seleziona tutto
Sub Kessi()
OutSh="Foglio2"                     '<<< Foglio su cui vuoi copiare i dati filtrati
KFiltro=Range("K1").value
Columns("A:A").Select      '<<< Colonna da usare per il filtro
Selection.AutoFilter Field:=1, Criteria1:=KFiltro
StSheet = ActiveSheet.Name      'Nome del foglio di partenza
Sheets(OutSh).select      'Azzera foglio di out
    Cells.Clear
    Range("A1").Select
Sheets(StSheet).select      'Torna al foglio di partenza
Range("A1:H10000").SpecialCells(xlCellTypeVisible).Copy _   '<<< vedi testo
   Destination:=(Sheets(OutSh).Range("A1")) 
End sub



Modifica le istruzioni marcate <<<, nel primo caso per indicare quale foglio vuoi usare per l’ output (il foglio SARA’ AZZERATO dalla macro!), poi per indicare la giusta colonna su cui vuoi eseguire il filtro, e infine per indicare l’ intero range di dati occupati sul tuo foglio (puoi abbondare, che non fa male).

Poi ti bastera’ inserire la chiave di filtro in K1 e lanciare la macro e il gioco dovrebbe essere fatto.
Fai sapere se hai bisogno di istruzioni per eseguire quanto detto.
E... come sempre, prima di fare esperimenti 2 copie di backup del file originale.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi Kessi » 07/12/07 09:33

Ciao Anthony..grazie della risposta.. :)
Ho provato a cercare tra le varie funzioni excel, ma mi risulta + semplice
con una macro..
inoltre con subtotale non sono proprio riuscita a far si ke mi sommi unicamente le celle visibili (e quindi filtrate).

Ad ogni modo, ho modificato un poco la routine ke mi hai scritto, e per la quale ti ringrazio..
ammetto di non aver capito esattamente tutti i passaggi..
un paio di istruzioni le ho modificate e aggiunte in modo ke il risultato sia + giusto. Ora visto ke ho notato una certa dimestikezza da parte tua, vorrei ripostarti il codice..e se hai voglia..cortesemente mi diresti se è possibile ottimizzarlo..magari alcuni passaggi ke ho aggiunto sono superflui o si poossono fare in altri modi..

Grazie mille ancora. Ciao.

Sub Kessi()

OutSh = "Dettaglio Preavvisi" '<<< Foglio su cui vuoi copiare i dati filtrati
KFiltro = InputBox(Prompt:="Numero Mandato", Title:="Inserisci il numero del mandato", Default:="0000")
If KFiltro = 0 Then
MsgBox "Non hai inserito un numero"
ElseIf Not IsNumeric(KFiltro) Then
KFiltro = 0
Else
'Columns("A:A").Select '<<< Colonna da usare per il filtro
Selection.AutoFilter Field:=1, Criteria1:=KFiltro
StSheet = ActiveSheet.Name 'Nome del foglio di partenza
Sheets(OutSh).Select 'Azzera foglio di out
Cells.Clear
Range("A1").Select
Sheets(StSheet).Select 'Torna al foglio di partenza
Cells.Select
Selection.Copy
Sheets(OutSh).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Sheets(StSheet).Select
Selection.AutoFilter Field:=1
Sheets(OutSh).Select
End If
End Sub
303% ChAoS !
Kessi
Newbie
 
Post: 3
Iscritto il: 06/12/07 15:33

Postdi Anthony47 » 07/12/07 16:04

Ci sono 100 modi per fare le stesse cose; il mio approccio e' che se funziona non si tocca...
Per quanto riguarda SUBTOTALE, essa per definizione lavora solo sulle celle visibili dopo il filtro; vedi help on line per tutte le opzioni disponibili.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[excel] Filtrare dati tramite macro":


Chi c’è in linea

Visitano il forum: Nessuno e 32 ospiti