Condividi:        

Copiare dati da diversi fogli Excel in 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

Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 29/09/14 14:11

Buongiorno Ragazzi, sono un nuovo utente del vostro forum.

Vi scrivo perché al lavoro mi sono imbattuto nella creazione di una macro in Excel e non conoscendo benissimo il VBA ho qualche difficoltà.
La macro che sto sviluppando ha lo scopo, per un dato punto di lavoro (portata-pressione) di interpolare diversi valori quali potenza, n° di giri, corrente etc.
Al momento attraverso un paio di pulsanti creati nel foglio principale di Excel che ho chiamato “main” riesco a caricare le prove che mi servono (prove che corrispondono a file .txt in cui sono presenti le misure sperimentali in termini di prestazioni e rumorosità) e a copiare le parti che mi interessano (nel mio caso solo le prestazioni) in nuovi fogli che vengono nominati automaticamente con il nome della prova (es. 3540.000, 3540.001 e così via).
Il mio obiettivo finale è quello di creare un grafico a dispersione portata-pressione che riporti tutti i punti delle prove caricate sui diversi fogli. Il problema è che i dati prestazionali dei diversi fogli hanno sempre lo stesso numero di colonne (dalla A alla K) mentre hanno righe variabili (dalle 15 alle 25) ed inoltre i fogli delle prove hanno un numero variabile.
Per completezza i valori di portata e pressione necessari per il grafico si trovano nelle colonne B e C.
Una soluzione, forse più semplice, sarebbe quella di riportare i dati dei diversi fogli in un foglio unico, da cui poi è possibile tracciare il grafico.
Avete qualche idea su come implementare il codice?

Spero di essermi spiegato bene. Grazie mille in anticipo
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Sponsor
 

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Flash30005 » 29/09/14 23:21

Ciao Kiter88 e benvenuto nel Forum

Si, il codice si può implementare ma quale codice?
e, inoltre, dovresti inviare i file (Excel e testo) interessati per pensare di adoperarci a fare qualcosa.

Per l'invio dei file utilizza questa procedura
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=80395

Poi dovresti informarci sulla versione di office in tuo possesso come indicato
Qui

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 30/09/14 07:55

Ciao Flash30005! Grazie per la risposta.
Nel link sottostante potete trovare il file Excel con il codice che ho implementato finora e 4 file .txt in cui sono presenti i dati di prestazione. In questi file .txt troverete diverse sezioni di dati ma l'unica che al momento mi serve è quella che inizia con "START DBTReducedData.vi".
Al momento il mio obiettivo è quello di rappresentare su un grafico tutti i punti delle prove caricate e selezionare manualmente (in futuro il passo successivo sarà quello di automatizzare anche questo passaggio) i punti che costituiscono il triangolo che contiene il punto di lavoro. Una volta copiati i dati dei 3 punti nella tabellina presente sul foglio "main", automaticamente nella tabella più basso saranno calcolati i dati interpolati.

La versione di Office che sto utilizzando è Win7 + Excel 2010.

https://www.dropbox.com/sh/r3cao9fex5eh ... QmFFa?dl=0

Grazie mille!
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 06/10/14 08:52

Flash30005 ha scritto:Ciao Kiter88 e benvenuto nel Forum

Si, il codice si può implementare ma quale codice?
e, inoltre, dovresti inviare i file (Excel e testo) interessati per pensare di adoperarci a fare qualcosa.

Per l'invio dei file utilizza questa procedura
http://www.pc-facile.com/forum/viewtopic.php?f=26&t=80395

Poi dovresti informarci sulla versione di office in tuo possesso come indicato
Qui

Ciao

Ciao ragazzi,
Avete qualche idea su come implementare il codice?
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 16/10/14 13:55

Riuscite a darmi una mano?? Anche solo qualche idea..
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Anthony47 » 16/10/14 14:09

Quindi i file txt sono gia' importati in excel, e "abitano" in fogli separati.
E' sufficiente una macro che "consolida" in un foglio Riepilogo il contenuto di tutti i fogli contenente dati? Se SI, c' e' qualche trucco per identificare i fogli da "consolidare" (cioe' da copiarne il contenuto in Riepilogo) e quelli da ignorare?

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

Re: Copiare dati da diversi fogli Excel in VBA

Postdi fastbike73 » 17/10/14 09:23

Anthony47 ha scritto:Quindi i file txt sono gia' importati in excel, e "abitano" in fogli separati.
E' sufficiente una macro che "consolida" in un foglio Riepilogo il contenuto di tutti i fogli contenente dati? Se SI, c' e' qualche trucco per identificare i fogli da "consolidare" (cioe' da copiarne il contenuto in Riepilogo) e quelli da ignorare?

Ciao

Ciao Anthony, io ho un problema analogo, avrei bisogno di consolidare i dati presenti nei 2 file (Settembre_14.xls e Ottobre_13.xls). Entrambi i file contengono dati nel range A:I (la prima riga riporta la descrizione dei campi che in entrambi i file sono uguali) le righe possono essere variabili (esempio nel file Settembre_14 possono esserci 1300 righe circa nell'altro 1400 o 1500 righe). Il nome dei fogli all'interno dei rispettivi file è lo stesso nome del file. Quindi Settembre_14 ha un solo foglio all'interno che si chiama Settembre_14 stessa cosa per l'altro file. I dati dovrebbero essere consolidati in un terzo file il cui nome è Preconsuntivo_14.xls (un solo foglio all'interno con il nome Preconsuntivo_14) e dovrebbe contenere al suo interno sempre il range A:I con i dati sommati dei 2 fogli. I dati da sommare si trovano nelle colonne H e I dei 2 fogli. Vorrei arrivare ad un soluzione che non preveda l'utilizzo di tabella pivot, possibilmente.
Ringrazio sin d'ora te e tutto il forum per l'aiuto.
Saluti.
fastbike
fastbike73
Win 10 & Office365
Filemaker Pro v. 13
fastbike73
Utente Senior
 
Post: 256
Iscritto il: 23/04/14 10:54

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Anthony47 » 18/10/14 02:15

Nel caso di kiter88 la mia idea era di portare in un foglio di riepilogo tutti i dati presenti nei vari fogli, accodando gli uni agli altri; questo dovrebbe essere sufficiente per creare un grafico a dispersione che usa tutti quei dati.

Tu chiedi un vero "consolidamento"; per questo Excel mette a disposizione uno strumento apposito: Menu /Dati /gruppo Strumenti dati /Consolida.
Guarda l' help on line alla voce "Consolidare i dati da più fogli di lavoro in uno solo"; il tuo dovrebbe essere un consolidamento "in base alla categoria".
Se il tuo lavoro non si limita a Settembre.xls e Ottoble.xls, ma conterra' anche Dicembre.xls, Gennaio.xls etc etc allora il mio suggerimento e' di copiare il foglio di ognuno dei mesi in un file di riepilogo (che quindi a fine anno avra' 12 fogli), e userai il consolidamento in base alla categoria lavorando sui fogli di questo file.
Una macro che copia rapidamente il foglio del file "mese.xls" in Riepilogo.xls e' questa:
Codice: Seleziona tutto
Sub Consolida1()
    Sheets(1).Copy Before:=Workbooks("Cartel1").Sheets("Foglio1")
End Sub
Va inserita nel file Riepilogo.xls, che deve contenere un Foglio1, e poi va lanciata avendo attivo il file del mese.

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

Re: Copiare dati da diversi fogli Excel in VBA

Postdi fastbike73 » 18/10/14 09:57

Buongiorno Anthony, come al solito, sei impeccabile nelle spiegazioni. Provo subito a fare ciò che dici... anche se il mio progetto, forse troppo ambizioso, era un altro... Appena ho gli esiti posto tutto.... Grazie Anthony!!!
fastbike73
Win 10 & Office365
Filemaker Pro v. 13
fastbike73
Utente Senior
 
Post: 256
Iscritto il: 23/04/14 10:54

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 20/10/14 16:47

Anthony47 ha scritto:Quindi i file txt sono gia' importati in excel, e "abitano" in fogli separati.
E' sufficiente una macro che "consolida" in un foglio Riepilogo il contenuto di tutti i fogli contenente dati? Se SI, c' e' qualche trucco per identificare i fogli da "consolidare" (cioe' da copiarne il contenuto in Riepilogo) e quelli da ignorare?

Ciao



Grazie mille per la risposta Anthony47! Direi che "consolidare" in un unico foglio sarebbe la soluzione migliore. Si dovrebbe copiare il contenuto di TUTTI i nuovi fogli aperti; alla fine con il primo pulsante l'utente seleziona le prove da aprire..quindi ha già fatto una selezione delle prove che vuole aprire.
Quindi l'opzione di fare un foglio "riepilogo" è ottima, il problema è che il contenuto dei vari file ha un n° di righe variabile..come faccio a gestire questa cosa? Ovviamente anche la creazione del grafico finale dovrà tenere conto di questa variabile.
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Anthony47 » 20/10/14 22:19

Non hai dato nessuna informazione su quali fogli copiare e quali ignorare, quindi immagino che siano "tutti", eccetto il foglio di Riepilogo.
Con questa premessa, prova con questo codice:
Codice: Seleziona tutto
Sub Consolida()
Dim myArea As Range, I As Long, LastR As Long, NextR As Long, CopyCol As String
'
CopyCol = "A:I"         '<<Le colonne da copiare, a partire da A
'
Range(CopyCol).Resize(1).Select

For I = 1 To Worksheets.Count
    If UCase(Left(Sheets(I).Name, 4)) <> "RIEP" Then
        Sheets(I).Select
        LastR = FindLast(ActiveSheet, CopyCol)
        Set myArea = Application.Intersect(Range(CopyCol), Range("2:" & LastR))
        NextR = FindLast(Sheets("Riepilogo"), CopyCol) + 1
        myArea.Copy Destination:=Sheets("Riepilogo").Cells(NextR, "A")
    End If
Next I
Range(CopyCol).Resize(1).Copy Destination:=Sheets("Riepilogo").Range("A1")
Sheets("Riepilogo").Select
End Sub

Function FindLast(ByRef mySh As Worksheet, ByVal myCols As String) As Long
Dim Last
With mySh.Range(myCols)
  Set Last = .Find(What:="*", After:=.Cells(1, 1), SearchDirection:=xlPrevious, SearchOrder:=xlByRows, LookIn:=xlFormulas)
End With
If Last Is Nothing Then FindLast = 1 Else FindLast = Last.Row
End Function
La riga marcata << va personalizzata con l' esatto intervallo delle colonne da copiare.
Operativamente:
-da excel, Alt-F11 per aprire l' editor delle macro
-Menu /Inserisci /Modulo
-copia il codice e incollalo nel frame vuoto di dx
-personalizzi l' istruzione

Torna poi sul file excel con i tuoi dati; inserisci un foglio vuoto e dagli il nome "Riepilogo"; infine manda in esecuzione la macro "Consolida" (Alt-F8, scegli Consolida dall' elenco che ti propone, premi Esegui). Dovresti trovare la somma di tutti i record dei vari fogli sul foglio Riepilogo, e su questi dati costruirai il tuo grafico.

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

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 21/10/14 07:47

Grazie Anthony..il codice è praticamente perfetto. L'unico problema è che nel foglio "Riepilogo" viene copiato anche il contenuto del foglio "Main"..scusami non sono stato chiaro nel messaggio precedente. Nel foglio "Riepilogo" vanno copiati i contenuti di tutti i fogli eccetto il primo foglio chiamato "Main". I fogli da copiare sono quelli aggiunti con la funzione "Apri_prova" e hanno nomi che variano, possono iniziare con un numero (es. 3868-000) oppure con una "S" (S4546-000).
Spero di essere stato chiaro e mi scuso ancora per l'incomprensione.
Ciao
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi ricky53 » 21/10/14 10:50

Ciao,
prova a sostituire l'istruzione
Codice: Seleziona tutto
If UCase(Left(Sheets(I).Name, 4)) <> "RIEP" Then

con
Codice: Seleziona tutto
If UCase(Left(Sheets(I).Name, 4)) <> "RIEP" And UCase(Sheets(I).Name) <> "MAIN" Then
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 21/10/14 13:37

ricky53 ha scritto:Ciao,
prova a sostituire l'istruzione
Codice: Seleziona tutto
If UCase(Left(Sheets(I).Name, 4)) <> "RIEP" Then

con
Codice: Seleziona tutto
If UCase(Left(Sheets(I).Name, 4)) <> "RIEP" And UCase(Sheets(I).Name) <> "MAIN" Then


Grazie mille Ricky53..è perfetto!!! Ora mi devo inventare un modo per rappresentare su un unico grafico (magari posizionato nel foglio "Main") le curve delle diverse prove (colonne B-C) tenendo presente che il n° di righe è variabile. Avreste qualche idea?
Grazie. Ciao
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi ricky53 » 21/10/14 14:00

Ciao,
disegna il grafico ed invia un file di esempio e renderemo il grafico "dinamico" al variare delle righe di dati della tabella creata con il codice di Anthony.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 23/10/14 08:44

ricky53 ha scritto:Ciao,
disegna il grafico ed invia un file di esempio e renderemo il grafico "dinamico" al variare delle righe di dati della tabella creata con il codice di Anthony.


Ciao Ricky53,
ti ringrazio per la tua disponibilità! Nel link seguente è riportato il file Excel con la macro finora sviluppata e i test di prova:

https://www.dropbox.com/sh/r3cao9fex5eh ... QmFFa?dl=0

Una volta "consolidato" il contenuto dei vari fogli nel foglio "Riepilogo", a questo punto il passo successivo sarebbe quello di creare un grafico a dispersione portata-pressione statica (colonne B e C) di ogni gruppo di dati. Il mio problema è che il n° di righe di ogni prova è variabile. Come puoi vedere dal foglio "Riepilogo", ogni prova è separata dalla successiva da due righe in cui nella prima sono riportate le unità di misura, mentre nella seconda c'è scritto "DATI". Immagino che per creare un grafico "dinamico" si debba fare riferimento a queste due righe, in modo da aggiungere punti al grafico fino a quando trova quelle due righe e di cercare se dopo le solite due righe è presente un'altra prova. (Qualcosa di simile :D )
Ovviamente sarebbe importante avere gli assi di riferimento del grafico anch'essi variabili, in modo che si adeguino ai dati caricati e che abbiano il titolo (Portata [m3/h] e Pressione statica [Pa]).
Per finire sarebbe possibile inserire nella legenda del grafico i n° di prova? (è il nome dei vari fogli aperti tra il "Main" e il "Riepilogo" (es. S4673-001).
Ti ringrazio anticipatamente e ti auguro una buona giornata.
Ciao
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi ricky53 » 23/10/14 11:36

Ciao,
non sono un mago dei grafici ... ci provo.

Questa sera scarico il tuo file e ci risentiamo.

E' preferibili nel foglio riepilogo togliere le due righe di separazione dei dati ed utilizzare una colonna di appoggio per identificare la prova cui i dati si riferiscono.

Affermazione sempre valida ... questa sera, dopo aver visto il tuo file, potrò essere più preciso.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 23/10/14 12:19

ricky53 ha scritto:Ciao,
non sono un mago dei grafici ... ci provo.

Questa sera scarico il tuo file e ci risentiamo.

E' preferibili nel foglio riepilogo togliere le due righe di separazione dei dati ed utilizzare una colonna di appoggio per identificare la prova cui i dati si riferiscono.

Affermazione sempre valida ... questa sera, dopo aver visto il tuo file, potrò essere più preciso.


Grande..grazie davvero!! Cmq togliere le due righe e usare una colonna di appoggio potrebbe essere un'ottima soluzione.
Per maggior chiarezza ti spiego quale è il mio obiettivo. Dopo aver caricato le prove e aver creato il grafico portata-pressione, all'utente verrà chiesto di inserire un punto di lavoro (sempre in portata-pressione) che verrà rappresentato anch'esso sul grafico precedente. A questo punto l'utente selezionerà (manualmente) i tre punti più vicini che formano un triangolo che racchiude il punto di lavoro. Una volta selezionati i punti, dovranno essere copiati i valori delle varie grandezze nell'apposito spazio nel foglio "Main" e a questo punto si otterrà il valore interpolato delle principali grandezze. Sarebbe bello rendere tutto automatizzato ma temo diventi troppo complicato quindi al momento va bene fare quest'ultima operazione manualmente.
Grazie ancora. Buon pomeriggio. Ciao
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi ricky53 » 23/10/14 12:26

Ciao,
in tutto questo è necessario il grafico?
Il punto di lavoro come viene scelto?
L'interpolazione non può essere fatta in altro modo ... senza il grafico ma con delle formule/funzioni da scrivere ad hoc con le regole che daresti tu?

Puoi fare un esempio di tutto quello che viene attualmente fatto manualmente e con l'utilizzo dei grafici?

Inizia dal foglio "Main": dove si scrivono i dati, che dati scriviamo, come si ricavano i punti che formano il triangolo, quali valori si copiano e dove si copiano (in quali celle del foglio Main) ...

Descrivi bene queste operazioni e forse troveremo una soluzione automatizzabile ... almeno spero.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Anthony47 » 23/10/14 13:51

Per avere dati puliti su Riepilogo e' utile modificare questa riga della macro:
Codice: Seleziona tutto
        Set myArea = Application.Intersect(Range(CopyCol), Range("4:" & LastR))        'Era "2", divernta "4"
Quindi imposti il grafico a dispersione usando tutta la colonna dei dati che ti servono: quando il numero di righe cambia il grafico dovrebbe allinearsi al nuovo numero di righe.

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

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Copiare dati da diversi fogli Excel in VBA":


Chi c’è in linea

Visitano il forum: Ricky0185 e 46 ospiti