Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Estrazione/copia di righe su altro foglio excel con 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

Estrazione/copia di righe su altro foglio excel con macro

Postdi fra1110 » 03/11/10 09:36

Ciao a tutti, mi servirebbe un aiuto per creare una macro che mi consenta questo:

ho un foglio contenente circa 14000 righe per 21 colonne.
La celle della colonna A sono o riempite con "NEW ENTRY" o sono vuote.
(questo new entry è generato da una formula che fa un controllo su un altro foglio)
Ho necessità ad ogni cambiamento dei dati sul foglio con la colonna new entry di avere tutte le new entry raggruppate su un nuovo foglio ( l'intera riga col new entry copiata papale papale su quest'altro foglio che chiamo foglionewentry per semplicità)
Vorrei eseguire tutto con una macro, in quanto il copia incolla con filtri e altro diventa pesantino, specie quando le righe aumentano.

anche con una macro non posso toccare il filtro automatico (autofilter) in quanto il tempo medio di esecuzione tra copia incolla vari è oltre 40 secondi.

Ho provato ad adattare una macro con il metodo find ma non avendo esperienza così avanzata mi sono arenato, con conseguente blocco del lavoro.

la macro era questa, forse può servire come punto di partenza:
Codice: Seleziona tutto
 Sub Pulsante1_Click()
originale = "1° trim (next)" 'nome del foglio con i dati da copiare
newentry = "1° TRIM new entry" 'nome del foglio dove copio i dati

Sheets(newentry).Cells.Clear

With Worksheets(originale).Range("A3:A14000")
    Set c = .Find(3, LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
c.EntireRow.Copy Destination:=Sheets(newentry).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


non so cosa sia c.address o firstaddress
il metodo find mi è oscuro
non so come dire al VBA di andare a cercare le celle con scritto new entry

preringrazio infinitamente chi mi può dare una mano :), se non mi sono espresso bene, cosa molto probabile mi spiego meglio.
fra1110
Utente Junior
 
Post: 15
Iscritto il: 03/11/10 09:23

Sponsor
 

Re: Estrazione/copia di righe su altro foglio excel con macr

Postdi fra1110 » 03/11/10 09:53

non so se come ragionamento di base possa andare, comunque si potrebbe:

cercare la cella con il "new entry" prendere il numero di riga e associarlo ad un array, copiare la riga corrispondente all'indice dell'array sul foglio newentry...
fra1110
Utente Junior
 
Post: 15
Iscritto il: 03/11/10 09:23

Re: Estrazione/copia di righe su altro foglio excel con macr

Postdi Anthony47 » 03/11/10 22:42

Ciao fra1110 e benvenuto nel forum.
La domanda e' abbastanza chiara, quello che ora serve sapere e' quale e' l' evento su cui si puo' lavorare per ridurre al minimo l' impatto sulla velocita' di elaborazione.
Per questo ti chiedo di descrivere come i dati di partenza sono modificati (importati da una sorgente esterna, digitati, ...), se le modifiche riguardano l' ultima riga o potenzialmente qualsiasi riga del foglio, e se i dati su foglionewentry ti servono in real time (come hai scritto) o se e' sufficiente averli aggiornati tramite una macro eseguita alla bisogna.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrazione/copia di righe su altro foglio excel con macr

Postdi fra1110 » 04/11/10 09:23

Anthony47 ha scritto:Ciao fra1110 e benvenuto nel forum.
La domanda e' abbastanza chiara, quello che ora serve sapere e' quale e' l' evento su cui si puo' lavorare per ridurre al minimo l' impatto sulla velocita' di elaborazione.
Per questo ti chiedo di descrivere come i dati di partenza sono modificati (importati da una sorgente esterna, digitati, ...), se le modifiche riguardano l' ultima riga o potenzialmente qualsiasi riga del foglio, e se i dati su foglionewentry ti servono in real time (come hai scritto) o se e' sufficiente averli aggiornati tramite una macro eseguita alla bisogna.

Ciao


ti ringrazio per la risposta,
allora i dati di partenza provengono da microsoft dynamics navigator che esporta in excel direttamente.
l'estrazione riguarda una qualsiasi riga del foglio di lavoro. i dati mi servono aggiornati una volta ogni tot, mi va benissimo anche un pulsante la cui pressione comporti la copia delle righe con new entry, sul nuovo foglionew entry.

Ho postato la stessa domanda anche su yahoo answer e mi hanno risposto in maniera diversa:

[*] Ti rispondo ma poi accetta una critica/consiglio.

Il metodo più veloce per ottenere il risultato non è un FILTRO come stai usando ma una QUERY.
Il filtro effettua una selezione effettuando confronti e spostando puntatori, una query invece demanda l'operazione al motore sql sicuramente più efficiente.

- Sul nuovo foglio occorre impostare una NUOVA QUERY SU DATABASE. (non dici che versione di access)
Dati->Importa Dati Esterni->Nuova query su database

- Selezioni il dinosauro da 14000000000000000 righe ;)))

- imposti i campi di ritorno e la where (probabilmente su NEW ENTRY)

- Calcoli quanto ci mette.

Ora permettimi di dire che l'automazione del processo, così come impostato, è completamente inefficiente alla base.

Excel non è stato fatto per questo tipo di operazioni, quello che ti serve è un vero database relazionale (anche access andrebbe bene) che vi consentirebbe, tempi migliori a parte, di poter agire con la massima libertà sui dati.

Inoltre una base dati mal progettata (e con excel lo è per forza) non garantisce lo sfruttamento e le risposte che ci si attendono da tutta la piramide aziendale, obbligano a sforzi eccessivi per la manutenzione e l'aggiornamento, introduce margini di errori inaccettabili, obbliga allo skill del personale e non mi dilungo...

mi occupo di process reengineering e sai quanti fogli excel con annesse persone schiavizzate ho liberato solo quest'anno?
;))

Un saluto
Axel [/*]

premetto che su access non ho MAI lavorato. non so quale sia la soluzione migliore, io dal mio canto preferisco continuare nel possibile su excel.

grazie anticipatamente :)
fra1110
Utente Junior
 
Post: 15
Iscritto il: 03/11/10 09:23

Re: Estrazione/copia di righe su altro foglio excel con macr

Postdi Anthony47 » 04/11/10 12:33

Non sono un conoscitore di database, ma a spanne se Dynamics Navigator consente di impostare una query quanto suggerito nell' altro forum ha la sua validita', anche se hanno confuso il filtro excel col filtro in un dbms.

Volendo procedere con excel pongo ancora una domanda, spero sia l' ultima: perche' i dati li vuoi estrarre dal foglio che contiene le formule e non direttamente dal foglio su cui sono importati i dati? Se non c' e' un motivo vincolante, il layout dei dati e' analogo?
Mi viene anche da dire che 14000 righe non sono una enormita', non mi tornano i tempi che dici dell' operazione di filtro; le formule in uso sono "convenzionali" o contengono in gran quantita' funzioni quali Scarto, Indiretto, Indice, Adesso, Oggi, Righe, Colonne, Cella, oppure (sempre in gran quantita') indirizzi indefiniti del tipo "A:A"?
Infine, non e' che usi sempre gran quantita' di Formattazione condizionale o di Celle unite?

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrazione/copia di righe su altro foglio excel con macr

Postdi fra1110 » 04/11/10 14:40

Anthony47 ha scritto:Non sono un conoscitore di database, ma a spanne se Dynamics Navigator consente di impostare una query quanto suggerito nell' altro forum ha la sua validita', anche se hanno confuso il filtro excel col filtro in un dbms.

Volendo procedere con excel pongo ancora una domanda, spero sia l' ultima: perche' i dati li vuoi estrarre dal foglio che contiene le formule e non direttamente dal foglio su cui sono importati i dati? Se non c' e' un motivo vincolante, il layout dei dati e' analogo?
Mi viene anche da dire che 14000 righe non sono una enormita', non mi tornano i tempi che dici dell' operazione di filtro; le formule in uso sono "convenzionali" o contengono in gran quantita' funzioni quali Scarto, Indiretto, Indice, Adesso, Oggi, Righe, Colonne, Cella, oppure (sempre in gran quantita') indirizzi indefiniti del tipo "A:A"?
Infine, non e' che usi sempre gran quantita' di Formattazione condizionale o di Celle unite?

Ciao



in effetti ho risparmiato un bel po di tempo eliminando tutte le schifezze come celle unite scorrimento ecc e ora ho ottenuto qualcosa di molto veloce. io comunque vorrei procedere con questa macro.
rispondo alla tua domanda:
perche' i dati li vuoi estrarre dal foglio che contiene le formule e non direttamente dal foglio su cui sono importati i dati? Se non c' e' un motivo vincolante, il layout dei dati e' analogo?
i dati li vorrei avere tutti raggruppati su un foglio (foglio new entry) così come si trovano nell'altro, quindi il layout è identico, e volendo posso anche fare a meno della cella "new entry" sul foglionewentry.
seleziono le righe con le celle newentry, le copio, le incollo sul foglio new entry.

grazie
fra1110
Utente Junior
 
Post: 15
Iscritto il: 03/11/10 09:23

Re: Estrazione/copia di righe su altro foglio excel con macr

Postdi Anthony47 » 05/11/10 00:56

Sorry, la tua ultima risposta diciamo che non mi aiutato, ma ci provo lo stesso.

Lavoriamo col filtro automatico sulla colonna A non so se del foglio con i dati originali o se quello con le formule. Supponiamo che si chiami Foglio1; vuoi creare il riepilogo NewEntri su Foglio3.

-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 celle, Menu /Modifica /Cancella /tutto
--seleziona Foglio1
--in col A scegli dal filtro automatico la voce New Entry
--seleziona le colonne che ti interessano, Copia
--vai su Foglio3, seleziona A1, Incolla; 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, quando vuoi ricrearti il tuo foglio NewEntry bastera' premere questo pulsante che eseguira' automaticamente le operazioni sudette.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrazione/copia di righe su altro foglio excel con macr

Postdi fra1110 » 05/11/10 08:30

Anthony47 ha scritto:Sorry, la tua ultima risposta diciamo che non mi aiutato, ma ci provo lo stesso.

Lavoriamo col filtro automatico sulla colonna A non so se del foglio con i dati originali o se quello con le formule. Supponiamo che si chiami Foglio1; vuoi creare il riepilogo NewEntri su Foglio3.

-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 celle, Menu /Modifica /Cancella /tutto
--seleziona Foglio1
--in col A scegli dal filtro automatico la voce New Entry
--seleziona le colonne che ti interessano, Copia
--vai su Foglio3, seleziona A1, Incolla; 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, quando vuoi ricrearti il tuo foglio NewEntry bastera' premere questo pulsante che eseguira' automaticamente le operazioni sudette.

Ciao


Grazie per la risposta, avevo provato all'inizio a fare così, ma mi risultava pesante. Ora che ho eliminato le celle unite, inutili formattazioni condionali, excel sembra cavarsela molto bene. posso ritenermi abbastanza soddisfatto per ora.Ti ringrazio per l'aiuto che mi hai dato. ciao!
fra1110
Utente Junior
 
Post: 15
Iscritto il: 03/11/10 09:23


Torna a Applicazioni Office Windows


Topic correlati a "Estrazione/copia di righe su altro foglio excel con macro":


Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti