Condividi:        

Estrarre dati da un foglio Excel

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 dati da un foglio Excel

Postdi Tony60 » 24/09/08 13:32

Ciao a tutti, ho un foglio Excel con centinaia di righe e 5 colonne. Devo estrarre qualche decina di queste righe e portarle su un nuovo foglio oppure in altra zona libera dello stesso foglio. In queste righe ci sono dei collegamenti ipertestuali residenti in file sulla stessa cartella del foglio excel e vorrei che funzionassero anche nel nuovo foglio o zona.
Quindi vorrei una macro in cui indico il parametro di ricerca e che mi riporti i risultati.
Grazie a tutti e a chi vorrà aiutarmi.
Tony60
Newbie
 
Post: 1
Iscritto il: 24/09/08 13:12

Sponsor
 

Re: Estrarre dati da un foglio Excel

Postdi dipic » 24/09/08 15:37

Supponendo che tu abbia 2 fogli nella cartella (FOGLIO1 con i dati da copiare e FOGLIO2 che conterrà i dati copiati) e supponendo anche che tu debba copiare delle righe non susseguenti, ti consiglio di mettere sulla prima colonna libera (se non ho capito male la F) una lettera X sulle righe che vuoi copiare da un foglio all'altro e lanciare la seguente macro:
Sub CopiaRigheConX()
'
Dim NOMEFOGLIO1, NOMEFOGLIO2, COLONNA, VALCELLA As String
Dim RIGA, RIGHE, NRRIGHE, RIGHEd, NRRIGHEd As Integer
'
NOMEFOGLIO1 = "FOGLIO1" 'nome del foglio con i dati da copiare
NOMEFOGLIO2 = "FOGLIO2" 'nome del foglio dove copio i dati
COLONNA = "F" 'colonna contenente le x
NRRIGHE = 2000 'numero righe totali del foglio con i dati da copiare
NRRIGHEd = 2000 'numero righe totali del foglio con i dati da copiare
Sheets(NOMEFOGLIO1).Select
Range(COLONNA & "1").Select
On Error GoTo fine
For RIGHE = 1 To NRRIGHE
Cells.Find(What:="x", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Selection.ClearContents
RIGA = Selection.Row
Rows(RIGA).Select
Selection.Copy
Range(COLONNA & "1").Select
Sheets(NOMEFOGLIO2).Select
Range("A1").Select
For RIGHEd = 1 To NRRIGHEd
VALCELLA = Range("A" & CStr(RIGHEd)).Value
If VALCELLA = "" Then
Rows(RIGHEd).Select
ActiveSheet.Paste
Range("A1").Select
Exit For
End If
Next RIGHEd
Sheets(NOMEFOGLIO1).Select
Range(COLONNA & "1").Select
Next RIGHE
Sheets(NOMEFOGLIO1).Select
Range("A1").Select
'
fine:
Range("A1").Select
End Sub

Spero ti sia d'aiuto
Ciao
Avatar utente
dipic
Utente Senior
 
Post: 106
Iscritto il: 13/09/08 14:57
Località: Cormòns (I)

Re: Estrarre dati da un foglio Excel

Postdi Anthony47 » 24/09/08 15:58

Ciao Tony e benvenuto nel forum.
In aggiunta a quanto scritto da dipic, che ti consiglio di provare.

Ricordo che avevo trattato un caso simile (non uguale), per cui avevo sviluppato una "funzione" ad hoc; non l' ho ritrovata con il Cerca ma ti posto quanto avevo risposto allora:
forse puoi [..risolvere..] creando una tua “funzione” che esegue un “uguale allargato”, cioe’ che copia anche altri formati dalla cella di origine.
Usa il seguente codice da incollare in un “modulo di codice” del vba:

Codice: Seleziona tutto
Function equa(ByRef source)
Application.Volatile
equa = source.Value
LCount = Range(source.Address).Hyperlinks.Count
If LCount > 0 Then SLink = Range(source.Address).Hyperlinks(1).Address
CCell = Application.Caller.Address(True, True)
TLCount = Range(CCell).Hyperlinks.Count
If TLCount > 0 Then Range(CCell).Hyperlinks(1).Delete
If LCount > 0 Then Range(CCell).Hyperlinks.Add Anchor:=Range(CCell), Address:=SLink
End Function

Procedura:
-apri il vba con Alt-F11
-fai Inserisci /Modulo
-copia il codice e incollalo nel vba, nel frame vuoto di dx
-torna su excel e invece di scrivere =A1 scrivi =EQUA(A1)

La funzione copiera’ sia il valore che l’ eventuale hyperlink presente nella cella sorgente; poi puoi ricopiare la formula, che rispetta le regole excel sugli indirizzamenti relativi vs assoluto. La funzione, grazie all’ Application.Volatile, viene eseguita ogni volta che il foglio viene ricalcolato, ma tieni presente che l’ inserimento o la modifica di un hyperlink non causa un ricalcolo; in caso di dubbio usa F9 per un ricalcolo forzato.
Le funzioni definite dall’ utente (come quella che abbiamo costruito) sono relativamente pesanti da eseguire, quindi usale solo dove ti servono.


La funzione, in pratica, copia nella nuova posizione il valore della cella di origine e l' eventuale hyperlink in essa presente.
La possibilita' di usare questo codice dipende da come dovrebbero essere i tuoi criteri di ricerca, cosa che al momento e' un po' vago e dovresti invece dettagliare.

Ciao, fatti sentire.
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre dati da un foglio Excel

Postdi biagiosurace » 20/07/10 07:10

Sono ultimo arrivato
Chiedo a qualcuno di voi, ho utilizzato lo script "estrarre righe in excel" , perfetto l'ho adattato togliendo la selezione alle righe del primo foglio, ho fatto in modo che ad ogni rilancio della macro mi cancella tutti i dati del secondo foglio ma non capisco come fare a non far cancellare nella colonna F la lettera R che inserisco per estrarre i dati?
Visto che ci siamo potreste adattare il codice in modo che in funzione di un valore di una colonna possta estrapolare i dati, è la stessa cosa ma ho la necessità di estrarre da un elenco tutti gli alunni dell'Istituto e farli inserire in diversi fogli in funzione della classe e della frequenza?
Vi sarei grato Biagio
biagiosurace
Utente Junior
 
Post: 16
Iscritto il: 20/07/10 07:00

Re: Estrarre dati da un foglio Excel

Postdi Anthony47 » 20/07/10 22:14

Ciao biagiosource e benvenuto nel forum.
Ci puoi dare un piccolo aiutino su che cosa intendi con script "estrarre righe in excel"?

Ti aspettiamo.
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre dati da un foglio Excel

Postdi biagiosurace » 21/07/10 17:01

Grazie di avermi risposto
faccio riferimento al codice scritto sopra. forse sbaglio a chiamarlo script dovrei dire codice in vb.
ho modificato quel codice cosi:
Codice: Seleziona tutto
Sub CopiaRigheConR()
'
Dim NOMEFOGLIO1, NOMEFOGLIO3, COLONNA, VALCELLA As String
Dim RIGA, RIGHE, NRRIGHE, RIGHEd, NRRIGHEd As Integer
'
' vuoto foglio 3

  For NRRIGHEd = 1 To 100
    Foglio3.Cells.Delete
  Next


NOMEFOGLIO1 = "FOGLIO1" 'nome del foglio con i dati da copiare
NOMEFOGLIO3 = "FOGLIO3" 'nome del foglio dove copio i dati
COLONNA = "T" 'colonna contenente le x
NRRIGHE = 2000 'numero righe totali del foglio con i dati da copiare
NRRIGHEd = 2000 'numero righe totali del foglio con i dati da copiare




Sheets(NOMEFOGLIO1).Select
Range(COLONNA & "1").Select

On Error GoTo fine
For RIGHE = 1 To NRRIGHE
Cells.Find(What:="R", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Selection.ClearContents
RIGA = Selection.Row
Rows(RIGA).Select
Selection.Copy
Range(COLONNA & "1").Select
Sheets(NOMEFOGLIO3).Select
Range("A1").Select
For RIGHEd = 1 To NRRIGHEd
VALCELLA = Range("A" & CStr(RIGHEd)).Value
If VALCELLA = "" Then
Rows(RIGHEd).Select
ActiveSheet.Paste
Range("A1").Select
Exit For
End If
Next RIGHEd
Sheets(NOMEFOGLIO1).Select
Range(COLONNA & "1").Select
Next RIGHE
Sheets(NOMEFOGLIO1).Select
Range("A1").Select

'
fine:
Range("A1").Select
Application.CutCopyMode = False
MsgBox "Il REPORT  RIGHE E' STATO GENERATO SUL FOGLIO 3 !" & vbCrLf & "Biagio Surace"
End Sub


---------
io avrei bisogno di non far cancellare dalla colonna "T" il dato che si trova in quanto se mi corrisponde ad un dato fisso non lo ritrovo dopo aver estratto le righe.
Vorrei utilizzare questo codice per estrarre delle righe con delle condizione per esempio condizione frequenta e classe /sezione.
Lavoro in una scuola spero che mi sia spiegato cosa voglio ottenere.
in un foglio excel avendo l'anagrafica ,la classe, la frequenza estrarre gli alunni della stessa classe in un foglio e solo che frequenta.
Grazie se mi puoi auitare
Biagio
biagiosurace
Utente Junior
 
Post: 16
Iscritto il: 20/07/10 07:00

Re: Estrarre dati da un foglio Excel

Postdi Anthony47 » 21/07/10 23:03

La macro che citi fu segnalata per fare altre cose, tra l' altro l' utente non aveva nemmeno confermato se faceva correttamente quanto richiesto.
Insomma mi pare strano che possa fare quello che chiedi, a parte la cancellazione sgradita di col T.

Per dare comunque un suggerimento che abbia un senso vorrei vedere il layout dei tuoi dati; basta uno screenshot (trovi le istruzioni qui: viewtopic.php?f=26&t=80395&p=466013#p466013) purche' siano visibili righe e colonne interessate.

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

Re: Estrarre dati da un foglio Excel

Postdi biagiosurace » 22/07/10 07:36

http://img819.imageshack.us/img819/8279/fileelenco.jpg
ho eseguito attentamenti il tuo consiglio, spero di esserci riuscito.
Altrimenti vedi se puoi eliminarmi il fatto che cancella nellA T Iil valore del primo foglio
Grazie Biagio
biagiosurace
Utente Junior
 
Post: 16
Iscritto il: 20/07/10 07:00

Re: Estrarre dati da un foglio Excel

Postdi Anthony47 » 22/07/10 20:25

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
Avatar utente
Anthony47
Moderatore
 
Post: 19213
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Estrarre dati da un foglio Excel

Postdi biagiosurace » 23/07/10 07:34

Carissimo,
grazie per le informazioni che hai scritto.
Forse è meglio concentrarsi su una sola cosa altrimenti con troppa carne al fuoco non si riesce ad arrostire perfettamente.
il codice estrai righe,postato sopra, è l'ideale per il mio lavoro, l'unica cosa che chiedo è di non far canellare dalla riga di partenza il dato di filtraggio, in questo caso la lettera R nella colonna T o qualsiasi altra colonna. vorrei spedirti il mio file per farti vedere meglio ma non so come fare.
il codice che mi hai mandato non riesco a capire come incastonarlo nel vecchio codice e farlo funzionare forse salto qualche passaggio.
Aiuto
Biagio
biagiosurace
Utente Junior
 
Post: 16
Iscritto il: 20/07/10 07:00

Re: Estrarre dati da un foglio Excel

Postdi biagiosurace » 23/07/10 08:28

E' doveroso ,visto che sono quasi bianco di vba excel, ringraziare , mi aveva portato fuori pista il valore c.value=5 e la formula Set c = .Find(2, LookIn:=xlValues) non avevo capito il valore 2 ma poi piano piano e leggendo ho capito il suo significato.
Praticamente ho sostituito il suol valore con una variabile, dichiarata in precedenza,ed in qualsiasi colonna cerco il valore da filtrare ed estrarre, restando fermo il valore iniziale. Cosa voglio di più?.
Grazie
biagiosurace
Utente Junior
 
Post: 16
Iscritto il: 20/07/10 07:00

Re: Estrarre dati da un foglio Excel

Postdi Anthony47 » 23/07/10 15:07

Bene.
Se devi filtrare contemporaneamente su piu' colonne prova anche il metodo del filtro automatico, come ti ho scritto.

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


Torna a Applicazioni Office Windows


Topic correlati a "Estrarre dati da un foglio Excel":


Chi c’è in linea

Visitano il forum: Nessuno e 44 ospiti