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

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 23/10/14 14:24

ricky53 ha scritto: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.


Se tutto il processo venisse automatizzato il grafico non sarebbe più necessario. Ora ti spiego tutto nel dettaglio.
Aprendo il foglio Excel inizialmente ti trovi due fogli, il "Main" e il "Riepilogo" che al momento quest' ultimo sarà vuoto. Nel foglio "Main" ci sono una serie di pulsanti numerati a cui sono associati delle macro. Cliccando il primo pulsante "N°1 CARICA PROVA" come prima cosa viene chiesto all'utente se vuole caricare una nuova prova; rispondendo "Sì" verrà aperta la finestra "Sfoglia" dove l'utente dovrà andare a cercare le prove da caricare. Una volta selezionata la prova (file .txt) viene copiato il contenuto della stessa (solo la parte di prestazioni, identificabile dalla frase "START DBTReducedData.vi") in un nuovo foglio che verrà nominato con il nome della prova caricata. In aggiunta sul foglio "Main", sotto i pulsanti man mano che vengono caricate le prove, vengono trascritte il nome delle prove caricate, tanto per semplificare la lettura. Questa operazione dovrà essere ripetuta fino a che tutte le prove di interesse siano caricate. A questo punto cliccando sul secondo pulsante "N°2 CONSOLIDA" i dati dei vari fogli vengono copiati sul foglio "Riepilogo" (sai meglio di me come funziona :D).
A questo punto attraverso il terzo pulsante "N°3 INTERPOLA" viene chiesto all'utente di inserire un valore di portata e un valore di pressione statica. Questi valori sono a discrezione dell'utente anche se ovviamente bisognerebbe mettere dei controlli nel caso si inserissero valori non adeguati. Per evitare di mettere mille controlli forse facendo il grafico, permetterebbe all'utente di capire quali sono i valori adeguati. Al momento non ci sono controlli anche se si potrebbe mettere un minimo di controllo almeno sulla portata e sulla pressione massima. Fino a qui il programma è abbastanza automatizzato a questo punto arriva la parte che attualmente è puramente manuale. Al momento si deve creare un grafico a dispersione sul foglio "Main" con tutti i valori di portata e pressione statica (colonne B e C) del foglio riepilogo e con il valore del punto di lavoro inserito. Portando tutti gli assi di riferimento alla stessa scala (esce un grafico illeggibile ma purtroppo è un'operazione fondamentale) occorre trovare i 3 punti che formano un triangolo che racchiude il punto di lavoro (ovviamente il triangolo con area minore). Per ogni punto si deve andare a copiare dal foglio "Riepilogo" o dai fogli singoli delle varie prove l'intera riga (dalla colonna B alla colonna K) corrispondente a quel punto e dovranno essere incollati nell'apposita tabella sul foglio "Main" (righe 28-29-30 colonne da B a K). A questo punto il gioco è fatto perché nella tabella finale (foglio "Main" righe 35-36 colonne D-K) sono salvate le formule necessarie all'interpolazione (varie equazioni del piano) e verrà calcolato il valore di tutte le grandezze in quel dato punto di lavoro.
Il procedimento di interpolazione non posso cambiarlo però è possibile automatizzarlo anche se temo diventi mooolto complicato. Bisognerebbe inventarsi un modo per trovare il triangolo corretto. Io sinceramente non impazzirei ad automatizzarlo completamente. Invece si potrebbe lasciare all'utente la possibilità di scelta dei 3 punti dal grafico e (se fosse possibile) si potrebbe rendere il grafico dinamico in modo che al click dell'utente sui punti del grafico, tutti i dati corrispondenti a quel punto vengano copiati e incollati nell'apposita tabella. Sinceramente non ho la minima idea se sia una cosa fatttibile. Se non fosse possibile o fosse troppo complicato andrebbe comunque bene il copia e incolla manuale.
Spero di essere stato chiaro e ti ringrazio anticipatamente. Ciao
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Sponsor
 

Re: Copiare dati da diversi fogli Excel in VBA

Postdi ricky53 » 23/10/14 14:55

Ciao,
io di solito di fronte ad una necessità parto da cosa ho come dati e da cosa devo ottenere poi analizzo bene e progetto cosa fare, disegno le tabelle dei dati e produco i risultati.

Tu vuoi portare avanti un discorso iniziato per il quale vedo complicazioni nell'agire sul grafico (però non sono un mago dei grafici quindi ...)

A mio avviso sarebbe meglio capire bene cosa si deve fare per interpolare i dati e cercare di produrre del codice.
In questa fase potrei aiutarti.
Sul grafico, anche se mi dispiace, non posso esserti utile.


CONSIGLIO: unisci il codice che è presente nei pulsanti 1, 2 e forse anche 3 ?
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 ricky53 » 23/10/14 23:22

Ciao,
hai letto la correzione di Anthony e le sue informazioni?

Ho scaricato il file e quanto ti avevo scritto viene confermato dai dati del tuo file.
Io rimango dell'idea di trovare la soluzione con del codice senza il grafico ma ci devi fornire le indicazioni su come interpolare i dati.

Fai le tue considerazione e ... aggiornaci
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 » 24/10/14 08:02

Anthony47 ha scritto: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


Ciao Anthony47! Ottimo grazie mille..ora il foglio "Riepilogo" è perfetto.
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 24/10/14 08:06

ricky53 ha scritto:Ciao,
hai letto la correzione di Anthony e le sue informazioni?

Ho scaricato il file e quanto ti avevo scritto viene confermato dai dati del tuo file.
Io rimango dell'idea di trovare la soluzione con del codice senza il grafico ma ci devi fornire le indicazioni su come interpolare i dati.

Fai le tue considerazione e ... aggiornaci


Ciao ricky53! Grazie al suggerimento di Anthony ora il foglio riepilogo è perfetto! Mi piace anche a me l'idea di fare tutto con il codice..inizio a pensare un modo matematico/geometrico per determinare i 3 punti del triangolo e le varie condizioni da inserire e poi vi faccio sapere! Intanto grazie mille!! 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 » 24/10/14 11:13

Ciao,
si la modifica di Anthony ti elimina le intestazioni, adesso ti manca la colonna di appoggio che ti identifica la prova cui i dati si riferiscono: vedi quanto ti avevo scritto nel mio intervento
ricky53 » 23/10/14 11:36
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 » 28/07/15 13:56

Ciao Ragazzi! Ho bisogno ancora del vostro aiuto.
E’ arrivata la necessità di automatizzare ancora un po’ la macro finora sviluppata.
Ricapitolo obiettivi e stato della macro attuale.
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.
Aprendo il foglio Excel inizialmente ci sono due fogli, il "Main" e il "Riepilogo" che al momento quest' ultimo sarà vuoto. Nel foglio "Main" ci sono una serie di pulsanti numerati a cui sono associati delle macro. Cliccando il primo pulsante "N°1 CARICA PROVA" come prima cosa viene chiesto all'utente se vuole caricare una nuova prova; rispondendo "Sì" verrà aperta la finestra "Sfoglia" dove l'utente dovrà andare a cercare le prove da caricare. Una volta selezionata la prova (file .txt) viene copiato il contenuto della stessa (solo la parte di prestazioni, identificabile dalla frase "START DBTReducedData.vi") in un nuovo foglio che verrà nominato con il nome della prova caricata. In aggiunta sul foglio "Main", sotto i pulsanti man mano che vengono caricate le prove, vengono trascritte il nome delle prove caricate, tanto per semplificare la lettura. Questa operazione dovrà essere ripetuta fino a che tutte le prove di interesse siano caricate. A questo punto cliccando sul secondo pulsante "N°2 CONSOLIDA" i dati dei vari fogli vengono consolidati sul foglio "Riepilogo".
A questo punto attraverso il terzo pulsante "N°3 INTERPOLA" viene chiesto all'utente di inserire un valore di portata e un valore di pressione statica. Questi valori sono a discrezione dell'utente anche se ovviamente bisognerebbe mettere dei controlli nel caso si inserissero valori non adeguati (ci penserò in un secondo momento).

Ecco il mio problema: ora avrei bisogno che nel foglio “Riepilogo” venisse creata una nuova colonna (in colonna L) chiamata “Distanza” che vada a calcolare per ogni punto (portata e pressione, rispettivamente in colonna B e in C) del foglio “Riepilogo” la distanza tra quel punto e il punto di lavoro inserito dall’utente (quindi costante e in posizione D12 e D13 nel foglio “Main”).
La formula è: ((X2-X1)^2+(Y2-Y1)^2)^0.5
Una volta abitata la colonna “Distanza” vorrei che venissero evidenziati i 3 valori più piccoli (magari evidenziando in giallo o colorando il carattere di tutta la riga).

A questo punto, copiando le righe evidenziate nel foglio “Riepilogo” ed incollandole nella tabella finale (foglio "Main" righe 35-36 colonne D-K) attraverso formule di interpolazione già salvate, verrà calcolato il valore di tutte le grandezze in quel dato punto di lavoro.
Al link seguente potete trovare tutto il necessario:

https://www.dropbox.com/sh/zqtmnp12n62j ... bf5Wa?dl=0

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

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Anthony47 » 30/07/15 01:56

Io direi di lavorare aggiungendo le nuove prestazioni in coda alle macro che gia' creano il tuo foglio Riepilogo.

La colonna L mi pare che si trovi oltre le colonne usate su Riepilogo, quindi gia' esiste ed e' utilizzabile. Per l'aggiunta delle formule, registrati una macro mentre, partendo dal foglio Main:
-selezioni il foglio Riepilogo
-Scrivi in L1 l'eventuale intestazione che ti interessa visualizzare
-scrivi il L2 la formula che ti interessa per calcolare la "distanza"
-fermi la registrazione
Vai sul codice della macro prodotta, e subito prima di End Sub inserisci queste due istruzioni:
Codice: Seleziona tutto
    lastA = Cells(Rows.Count, 1).End(xlUp).Row
    Range("L2").AutoFill Destination:=Range("L2:L" & lastA), Type:=xlFillDefault
End Sub

Infine vai sulla macro che ti genera il foglio Riepilogo, e subito prima della sua End Sub inserisci l'istruzione
Codice: Seleziona tutto
Call LaMacroAutoregistrata


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 » 30/07/15 09:00

Grazie Anthony47!! Il calcolo della distanza ora è perfetto!
C'è un modo per evidenziare i tre valori di distanza più bassi? Il top sarebbe che venissero evidenziate le 3 righe, corrispondenti ai 3 valori di distanza più piccoli, da colonna B a colonna L in modo che diventi intuitivo copiare le celle evidenziate ed incollarle nell'ultima tabellina del folgio "Main" dove avviene il calcolo dell'interpolazione; ma se dovesse essere troppo incasinato andrebbe bene se venissero evidenziate solo le distanze.

Ho aggiornato la macro nel link di Dropbox.

https://www.dropbox.com/sh/zqtmnp12n62j ... bf5Wa?dl=0

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

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Flash30005 » 30/07/15 15:43

@Kiter88
Il link postato è errato
prova a riproporlo corretto

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 » 31/07/15 11:06

Grazie Flash30005!!
Ecco il link corretto:

https://www.dropbox.com/sh/zqtmnp12n62j ... bf5Wa?dl=0

Ciao
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Anthony47 » 01/08/15 23:09

Non vedo nel file nessun dato, comunque se hai 2007 o superiore nella formattazione condizionale hai la possibilita' di colorare i piu' bassi (o i piu' alti) N elementi di un intervallo.
Mi viene inoltre da pensare che se il tutto serve per aiutare a copiare i dati nel foglio Main tanto varrebbe invece copiare questi dati direttamente, usando una formula che lavora sul Rango degli elementi.
Se questo pensiero si incastra nel tuo lavoro, allora pubblica un file con dati e descrivi che cosa va copiato in Main e cercheremo di identificare le formule idonee.

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 » 03/09/15 08:04

Ciao Anthony47, grazie del supporto!
Condivido il tuo pensiero di copiare direttamente nel foglio Main i dati necessari, sarebbe l'operazione perfetta!
Di seguito cerco di descrivere cosa andrebbe copiato nel foglio Main.
In Dropbox troverete un file già compilato in cui ho già inserito un esempio di dati di prova, un punto di lavoro e dove è già stata calcolata la distanza tra ciascun punto della prova ed il punto di lavoro in termini di portata-pressione statica.
Quello di cui ora avrei bisogno è identificare nel foglio Riepilogo in colonna L, i 3 valori di distanza più piccoli e copiare le corrispondenti righe da colonna B a colonna K nel foglio Main nella tabellina B28:K30.
L'ordine delle righe copiate è irrilevante.
Una volta copiate queste righe, nella tabella finale D36:K36 del foglio Main verrà calcolato automaticamete il valore interpolato delle varie grandezze.
Di seguito vi lascio il link dove è stato caricato il file:
https://www.dropbox.com/sh/zqtmnp12n62j ... bf5Wa?dl=0

Grazie mille in anticipo.
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Anthony47 » 03/09/15 21:28

Per quello che leggo dovrebbe quindi bastere questa macro:
Codice: Seleziona tutto
Sub top3()
Dim myCnt As Long, myLF As Double, myPos As Long, I As Long
'
Sheets("Riepilogo").Select
For I = 1 To 3
    myLF = Application.WorksheetFunction.Small(Range("L:L"), I)
    myPos = Application.Match(myLF, Range("L:L"), 0)
    Sheets("Main").Range("B28").Offset(myCnt, 0).Resize(1, 10).Value = _
        Cells(myPos, 2).Resize(1, 10).Value
    myCnt = myCnt + 1
Next I
End Sub


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 » 07/09/15 12:07

Grazie mille Anthony47!! E' perfetta!!

Ora inizio un po' a testarla..Grazie ancora!!
Ciao
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 16/05/16 11:36

Ciao Ragazzi! Ho bisogno ancora del vostro aiuto.

E’ arrivata la necessità di completare l’automatizzazione della macro finora sviluppata.
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. La caratteristica di questa interpolazione, è che deve avvenire sulle facce triangolari di una superficie tesa tra i punti tridimensionali dati.

Con il vostro aiuto, cliccando in ordine i pulsanti numerati presenti nel foglio “Main” ottengo dei valori interpolati, ma purtroppo questi non sempre sono corretti e quindi diventa necessario inserire alcuni controlli.
Di seguito una breve descrizione dello stato attuale della macro:
Una volta caricati i file di prova, vengono prima consolidati nel foglio “Riepilogo” e successivamente viene memorizzato il punto di lavoro dell’utente. A questo punto, attraverso il pulsante “N°4 CALCOLA DISTANZA”, sul foglio Riepilogo in colonna L viene calcolata per ogni punto (portata e pressione statica, rispettivamente in colonna B e C) la distanza tra quel punto e il punto di lavoro inserito dall’utente (quindi costante e in posizione D12 e D13 nel foglio “Main”).
Infine con il pulsante “N°5 CERCA VALORI ED INCOLLA”, la macro cerca i 3 valori di distanza più piccoli (in colonna L del foglio “Riepilogo”) e copia le rispettive righe (da colonna B a K) e le incolla nel foglio “Main” nella tabella B28:K30. Finalmente, una volta incollate le righe, attraverso formule di interpolazione già salvate, verrà calcolato il valore di tutte le grandezze in quel dato punto di lavoro.

Affinché il processo e i risultati dell’interpolazione siano attendibili è importante che i tre punti scelti (con distanza minore dal punto di lavoro introdotto dall’utente) formino un triangolo in cui il punto di lavoro sia interno. Questo è lo step mancante. Devo verificare che:
1- I tre punti formino un triangolo (fare controllo se i 3 vertici sono allineati, in quel caso passare al punto successivo e ripetere controllo)
2- Il punto di lavoro sia interno al triangolo

Ho provato a scrivere una bozza di codice con tutti questi controlli ma non riesco ad implementarlo in VBA in quanto non conosco molto bene questo linguaggio. Lo potete trovare come file Word insieme alla Macro finora sviluppata al link seguente:

https://www.dropbox.com/sh/zqtmnp12n62j ... bf5Wa?dl=0

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

Re: Copiare dati da diversi fogli Excel in VBA

Postdi kiter88 » 24/05/16 07:32

Ragazzi, avete qualche suggerimento?
kiter88
Utente Junior
 
Post: 19
Iscritto il: 29/09/14 14:02

Re: Copiare dati da diversi fogli Excel in VBA

Postdi Anthony47 » 24/05/16 14:51

Ragazzi, avete qualche suggerimento?

Io no, semplicemente perche' non ho idea di che cosa devi fare e la descrizione e' piu' a livello di processo complessivo (che noi ignoriamo e vogliamo continuare a ignorare) che non di elaborazione dati.

Probabilmente se spieghi da quali dati presenti nel file che allegasti dobbiamo partire e quali analisi vanno fatte forse potremmo "sparare" qualche suggerimento...

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

Precedente

Torna a Applicazioni Office Windows


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


Chi c’è in linea

Visitano il forum: Nessuno e 132 ospiti