Condividi:        

Estrarre e raggruppe dati in excel con VBA

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

Estrarre e raggruppe dati in excel con VBA

Postdi JoJo5 » 09/11/10 15:49

Ciao a tutti!!
Sono nuova e sono un'assoluta imbranata con il computer, soprattutto con VBA :D
Vi illustro il mio problema:
Ho una tabella con 10 colonne e più di 10'000 righe (quindi niente filtri perché diventa tutto troppo complicato); vorrei creare una macro che estrae tutti i numeri della colonna 7 e 8 in base alla colonna 1. Mi spiego meglio, nella colonna 1 ho dei nomi mentre nella 7 ho delle date e nella 8 dei numeri, ad un nome corrispondono più date e numeri, quindi vorrei fare in modo che se dico uno dei nomi che c'è nella colonna 1, la macro mi espone tutti i numeri che ci sono nella colonna 7 e 8 avendo su quelle righe il nome scelto della colonna 1.
Ricapitolando, in un nuovo foglio excel vorrei che si mostrasse la colonna 1 (solo con il nome scelto) con di fianco le date e numeri corrispondenti..

Spero di essere stata più o meno chiara :roll:

In ogni caso ringrazio tutti per la disponibilità!! :)
JoJo5
Newbie
 
Post: 9
Iscritto il: 09/11/10 15:21

Sponsor
 

Re: Estrarre e raggruppe dati in excel con VBA

Postdi Anthony47 » 10/11/10 14:31

Ciao JoJo5 e benvenuta nel forum.
Guarda questa discussione, quasi simile alla tua: viewtopic.php?f=26&t=88798
14mila righe * 21 colonne, richiesta macro perche' 14mila righe sono tante, conclusa con Filtro automatico.
Questo per dire che 10mila righe & 10 colonne non sono una enormita', e comunque farne lo scan in vba certamente porta via piu' tempo che non lavorare con le funzioni native. Mi dovresti pero' anche dire quale e' il numero stimato di valori possibili in col A e quale versione di excel usi.

Se vuoi si puo' anche fare con formule, come descritto qui: viewtopic.php?p=472685#p472552

Ciao, ti aspettiamo.
Avatar utente
Anthony47
Moderatore
 
Post: 19181
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre e raggruppe dati in excel con VBA

Postdi JoJo5 » 10/11/10 16:29

Ciao Anthony47,
prima di tutto grazie mille del benvenuto!! :)
Secondariamente, grazie anche del consiglio e dei link che mi hai mandato. Purtroppo però non posso utilizzare i filtri automatici perché quello che ho chiesto sopra è solo una piccolissima parte (la più semplice oltretutto :neutral: ) di tutto il lavoro che devo fare.. Sto cercando di andare passo passo, e quello è il primo! :)
Il numero stimato di valori possibili nella col A è infinito, perché il file viene aggiornato mensilmente. Ora è circa di 1000, però il mese prossimo potrebbe aumentare o diminuire.
Mentre la versione di excel è 2003.

C'è qualche possibilità di venirne fuori?! :D

Grazie mille in ogni caso dell'aiuto!!
JoJo5
Newbie
 
Post: 9
Iscritto il: 09/11/10 15:21

Re: Estrarre e raggruppe dati in excel con VBA

Postdi Anthony47 » 10/11/10 22:33

Hai la mia comprensione per quanto riguarda la complessita' del lavoro che stai affrontando, ma ancora non capisco perche' non puoi fare questa cosa col filtro automatico.
Poiche' io sono convinto di quel che propongo (so che in questo modo mi attribuisco una certa presunzione, ma non vedo perche' fare scelte che non capisco) allora ti spingo a procedere, mutuando quanto scritto nella prima discussione che ti ho linkato, in questo modo:

Supponiamo che il foglio coi dati si chiami Foglio1; vuoi creare l' analitico di un nominativo su Foglio3 (il foglio non deve essere usato nelle N colonne che saranno popolate di dati).

-seleziona Foglio1 e imposta un filtro automatico su colonna A (seleziona col A, Menu /Dati / Filtro automatico)
poi avvia la registrazione di una nuova macro (Menu /Strumenti /Macro /Registra nuova macro)
-esegui diligentemente_
--selezioni Foglio3, selezioni tutte le colonne che popolerai di dati (le avrai contate prima su Foglio1), Menu /Modifica /Cancella /Tutto (sia chiaro che cosi' CANCELLIAMO TUTTO il contenuto di quelle colonne)
--seleziona Foglio1
--in col A scegli dal filtro automatico una voce a piacere, ad esempio Rossi.
--seleziona le colonne che ti interessano, Copia
--vai su Foglio3, seleziona A1, Incolla (o Incolla-speciale/Valori); seleziona A1
--torna su Foglio1, seleziona A1; Menu /Dati /Filtro /Mostra tutto
-interrompi registrazione macro (Menu /Strumenti /Macro /Interrompi registrazione)

A questo punto disegnati un pulsante (trovi questa forma nella barra degli strumenti Moduli) e assegnagli la macro appena creata (ti verra' fatta una domanda specifica nel corso della creazione del pulsante).

A questo punto hai una macro che ti filtra per un nominativo a caso e ne copia i dati in Foglio3..
Scegli ora su Foglio1 una cella libera da usare per impostare quale nominativo scegliere; supponiamo che sia M1.
Modifichiamo la macro creata: Alt-F8, ti presenta l' elenco delle macro disponibili; seleziona quella appena registrata, premi Modifica; si aprira' l' editor delle macro e vedrai il codice creato a fronte delle operazioni suddette; cerca una riga che contiene
Selection.AutoFilter Field:=1, Criteria1:="Rossi"
E modifica in
Selection.AutoFilter Field:=1, Criteria1:=Range("M1").Value

Torna su excel, scrivi un nominativo in M1, premi il pulsante per far partire la macro, vedi l' effetto su Foglio3.
Se fa quello che ti serve ti concentrerai su come usare questa logica con l' interfaccia che preferisci all' interno del tuo programma, ad esempio usando invece di M1 un ListBox, o un Combobox, o una userform; ma questo dipendera' anche dalla tua esperienza vba.

Se non fa quello che ti serve posta ancora...

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

Re: Estrarre e raggruppe dati in excel con VBA

Postdi JoJo5 » 11/11/10 11:03

Ciao Anthony!!
Devi scusarmi, ma io sono veramente un'imbranata con il computer e quando hai fatto riferimento al filtro automatico, avevo capito tutta un'altra cosa. :P
Presuntuoso o no, sei diventato il mio nuovo idolo!! :)

Ho fatto tutto quello che hai scritto, e sembrava funzionare. Ho registrato la macro e poi l'ho modificata come hai detto. Il problema è che mi da un errore in un'altra linea della macro, te la posto:

Sub RechercheValeur()
Sheets("Test1").Select
ActiveCell.Offset(0, -4).Columns("A:C").EntireColumn.Select
Selection.Clear
Sheets("raw").Select
Selection.AutoFilter Field:=1, Criteria1:=Range("L2").Value
ActiveCell.Offset(-220, -5).Range("A1:A109,F1:G109").Select
ActiveCell.Offset(-112, 0).Range("A1").Activate
Selection.Copy
Sheets("Test1").Select
ActiveCell.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select
Application.CutCopyMode = False
Selection.NumberFormat = "dd/mm/yy;@"
ActiveCell.Offset(13, 3).Range("A1").Select
Sheets("raw").Select
Selection.AutoFilter Field:=1
End Sub

Sicuramente ho sbagliato qualcosa io.. Ma cosa?! :)

Ti ringrazio in anticipo dell'aiuto!!
JoJo5
Newbie
 
Post: 9
Iscritto il: 09/11/10 15:21

Re: Estrarre e raggruppe dati in excel con VBA

Postdi JoJo5 » 11/11/10 11:11

Prima che mi rispondi, ho provato a cambiare il dato da -4 a -3 (in rosso) e non mi da più errore (anche se non ho la più pallida idea del perché, visto che non ho ancora ben capito come funziona ActiveCell.Offset e da dove prende i dati). Ho riprovato a farla andare ma adesso la linea che non funziona è un'altra.

Sub RechercheValeur()
Sheets("Test1").Select
ActiveCell.Offset(0, -3).Columns("A:C").EntireColumn.Select
Selection.Clear
Sheets("raw").Select
Selection.AutoFilter Field:=1, Criteria1:=Range("L2").Value
ActiveCell.Offset(-220, -5).Range("A1:A109,F1:G109").Select
ActiveCell.Offset(-112, 0).Range("A1").Activate
Selection.Copy
Sheets("Test1").Select
ActiveCell.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select
Application.CutCopyMode = False
Selection.NumberFormat = "dd/mm/yy;@"
ActiveCell.Offset(13, 3).Range("A1").Select
Sheets("raw").Select
Selection.AutoFilter Field:=1
End Sub

Ed ho come l'impressione che anche la linea successiva (di quella evidenziata) non funzionerà. Può dipendere dal fatto che seleziono solo da A1 a A109 e non tutte le righe?
Oppure sono i dati in ActiveCell.Offset a essere sbagliati? (sinceramente non ho ben capito dove li va a trovare -220 e -5 :P )

Grazie mille di nuovo!!! :D
JoJo5
Newbie
 
Post: 9
Iscritto il: 09/11/10 15:21

Re: Estrarre e raggruppe dati in excel con VBA

Postdi JoJo5 » 11/11/10 16:54

Eccomi di nuovo :)
Sono riuscita a risolvere il problema!!
Ora però volevo chiederti se fosse possibile, dai dati che estraggo, prendere solo gli ultimi 38. In pratica, nella colonna G ci sono delle date (di fine mese) in ordine crescente, però a me servirebbero solo le ultime 38 (p.ex la prima data di 'Rossi' è 30.04.2002 fino all'ultima che è 31.10.2009, a me servirebbe la data a partire da 31.08.2006 fino al 31.10.2009) ovviamente con i dati della colonna H corrispondente; esiste un modo per metterlo nella formula?

Grazie di nuovo!! :D
JoJo5
Newbie
 
Post: 9
Iscritto il: 09/11/10 15:21

Re: Estrarre e raggruppe dati in excel con VBA

Postdi Anthony47 » 12/11/10 00:12

Puoi pubblicare la macro con ui hai risolto, perche' in quella precedente ci sono situazioni aleatorie che vorrei vedere se sono state eliminate?
Per la nuova domanda, immagino che parli delle ultime 38 righe dei dati filtrati...
Se e' cosi', allora puoi lavorare sui dati ricopiati in foglio "Test"; cioe' individui l' ultima riga importata, controlli che sia oltre 39, selezioni le righe da 2 a Ultima-38 e le elimini.

Mi pare che col vba cominci ad avere una certa pratica, comunque se non risolvi con questi spunti posta ancora.

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

Re: Estrarre e raggruppe dati in excel con VBA

Postdi JoJo5 » 12/11/10 11:27

Ciao Anthony!
Ecco la macro che ho utilizzato:

Sub NAV()
Sheets("Foglio3").Select
ActiveCell.Columns("A:C").EntireColumn.Select
Selection.Clear
Sheets("Foglio1").Select
Selection.AutoFilter Field:=1, Criteria1:=Range("L2").Value
ActiveCell.Range("A1:A40000").Select
ActiveWindow.ScrollRow = 1
ActiveCell.Range("A1:A40000,F1:G40000").Select
ActiveCell.Offset(0, 5).Range("A1").Activate
Selection.Copy
Sheets("Foglio3").Select
ActiveCell.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select
Application.CutCopyMode = False
Selection.NumberFormat = "dd/mm/yy;@"
Sheets("raw").Select
ActiveWindow.SmallScroll Down:=-63
ActiveCell.Offset(0, -5).Range("A1").Select
Selection.AutoFilter Field:=1
End Sub

Ho usato 40'000 cosi tiene in conto di tutte le righe (che alla fine più di 30'000 e non 10'000 come avevo scritto nel primo post :P)

Per quanto riguarda le ultime 38 righe, registrando una nuova macro, mi cancella sempre lo stesso numero di righe dell'esempio che registro. Se, ad es, Rossi ha 22 righe da cancellare (per far si che rimangano solo le altre 38), se cambio Nome mi cancella sempre 22 righe (anche se magari le righe da cancellare sono di più o di meno).
Ora che ho un po' più di dimestichezza ci provo da sola, ma i risultati sembrano scarsi. :)
JoJo5
Newbie
 
Post: 9
Iscritto il: 09/11/10 15:21

Re: Estrarre e raggruppe dati in excel con VBA

Postdi Anthony47 » 12/11/10 23:42

Ho modificato qualche istruzione ed eliminato righe inutili.
Tieni presente che, non tornandomi l' uso di "Foglio3", "Foglio1" e foglio "raw" ho assunto che nella macro che hai postato Foglio1=raw e Foglio3 e' il foglio di destinazione (l' avevi chiamato "Test1" nei post precedenti). Per lasciare la massima leggibilita' del codice ho lasciato tutti i ".Select", che invece potrebbero essere eliminati in gran parte.
Codice: Seleziona tutto
Sub NAV1()
Sheets("Foglio3").Select
Range("A:C").Clear
Sheets("raw").Select    '<<< FOGLIO1??
Selection.AutoFilter Field:=1, Criteria1:=Range("L2").Value
Range("A:A,F:G").Select
Selection.Copy
Sheets("Foglio3").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B:B").EntireColumn.Select
Application.CutCopyMode = False
Selection.NumberFormat = "dd/mm/yy;@"
Sheets("raw").Select
Range("A1").Select
Selection.AutoFilter Field:=1
End Sub

Per quanto riguarda la storia delle ultime 38 linee: quando sei su Foglio3, dopo aver formattato col B come data prova a inserire queste:
Codice: Seleziona tutto
LastR = Cells(Rows.Count, 1).End(xlUp).Row
If LastR > 39 Then
    Rows("2:" & LastR - 38).Select
    Selection.Delete Shift:=xlUp
End If
Range("A1").Select

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

Re: Estrarre e raggruppe dati in excel con VBA

Postdi JoJo5 » 16/11/10 09:04

Ora funziona tutto!! :D

Grazie grazie grazie!!! :D
JoJo5
Newbie
 
Post: 9
Iscritto il: 09/11/10 15:21


Torna a Applicazioni Office Windows


Topic correlati a "Estrarre e raggruppe dati in excel con VBA":


Chi c’è in linea

Visitano il forum: Nessuno e 44 ospiti