Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Macro Excel 2010

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

Macro Excel 2010

Postdi andreaing84 » 07/08/12 14:03

Salve a tutti!
ho bisogno di creare una macro che automatizzi una procedura altrimenti troppo lunga.
Ho a disposizione due coppie di serie di dati: una colonna x1 e una colonna y1 (circa 1000 righe) e una colonna x2 e una corrispondente colonna y2. Le x rappresentano fisicamente degli istanti di tempo, mentre le y sono temperature. L'intervallo di tempo totale è lo stesso per x1 e x2, solo che gli intervalli non corrispondono perchè misurati in maniera non cadenzata: quindi per uno stesso intervallo di tempo totale, poniamo 300 secondi, ho 1000 valori misurati in maniera non uniforme. Per confrontare gli andamenti delle due y ho la necessità di ridurre tutti i valori su un asse di riferimento. Gli andamenti delle y non possono essere ricondotti ad una retta mediante retta di regressione, oppure approssimati con curve di tendenza, in quanto i valori sono estremamente variabili.
Mi potreste aiutare a risolvere la barbosa questione :?: :?: :?:
andreaing84
Utente Junior
 
Post: 12
Iscritto il: 07/08/12 13:52

Sponsor
 

Re: Macro Excel 2010

Postdi wallace&gromit » 07/08/12 14:19

ciao andreaing e benvenuto nel forum,
è ovvio che non potrai mai sapere la temperatura reale in un istante in cui non l'hai misurata, quindi qualsiasi sistema che puoi trovare ti darà un dato che non corrisponde alla realtà.
D'altro canto si è soliti rappresentare questo tipo di dati con un grafico a linee, cioè si accetta l'approssimazione che tra due istanti noti si possa interpolare linearmente.
Esistono delle applicazioni già pronte che fanno questo (io ho installato il componente aggiuntivo OMDIMATH, che ho scaricato un po' di tempo fa e che però non trovo più in rete e funziona su office 2003, se ti interessa te lo carico su rapidshare).
Altrimenti esistono programmatori in questo forum che riescono ad allestire applicazioni ad hoc.
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: Macro Excel 2010

Postdi Bebo » 07/08/12 14:54

Ciao e ben arrivato.
fammi capire bene il problema, tu vuoi un grafico che mostri tutti i dati delle prove ordinati o una interpolazione?
nel primo caso esiste l'operazione di riordino, nel secondo esistono formule di interpolazione...
se riesco a capire meglio provo a prepararti il listato che poi quelli più esperti di me ti aiuteranno a perfezionare...

questo ciò che ho capito io:
devi unire le due letture (x1 e x2 con relative y) ordinandole per valori crescenti e poi creare una qualcosa che se gli dai in ingresso la x di da la relativa y anche se non presente in elenco.
giusto?
Bebo
Utente Junior
 
Post: 11
Iscritto il: 02/08/12 09:39

Re: Macro Excel 2010

Postdi Bebo » 07/08/12 14:57

andreaing84 ha scritto:Salve a tutti!
ho bisogno di creare una macro che automatizzi una procedura altrimenti troppo lunga.
Ho a disposizione due coppie di serie di dati: una colonna x1 e una colonna y1 (circa 1000 righe) e una colonna x2 e una corrispondente colonna y2. Le x rappresentano fisicamente degli istanti di tempo, mentre le y sono temperature. L'intervallo di tempo totale è lo stesso per x1 e x2, solo che gli intervalli non corrispondono perchè misurati in maniera non cadenzata: quindi per uno stesso intervallo di tempo totale, poniamo 300 secondi, ho 1000 valori misurati in maniera non uniforme. Per confrontare gli andamenti delle due y ho la necessità di ridurre tutti i valori su un asse di riferimento. Gli andamenti delle y non possono essere ricondotti ad una retta mediante retta di regressione, oppure approssimati con curve di tendenza, in quanto i valori sono estremamente variabili.
Mi potreste aiutare a risolvere la barbosa questione :?: :?: :?:

ho evidenziato la frase perchè mi ha colpito. Tu sai già come farlo in modo lungo, giusto?mi puoi mettere il listato per 2-3 esempi?così proviamo ad automatizzarla.
Bebo
Utente Junior
 
Post: 11
Iscritto il: 02/08/12 09:39

Re: Macro Excel 2010

Postdi andreaing84 » 07/08/12 14:57

ciao wallace&gromit e Bebo grazie per la tempestiva risposta!
...voglio interpolare i valori di due serie numeriche. Concettualmente ho trovato la soluzione ma bisogna implementarla con qualche algoritmo. Provo a spiegarla:

A1 1 B1 18 C1 1 D1 17,5
A2 2 B2 16,5 C2 1,5 D2 16,1
A3 3,2 B3 10 C3 3 D3 11
A4 3,6 B4 11 C4 3,3 D4 9,2
A5 4 B5 12 C5 4,6 D5 11,8
A6 4,3 B6 12,3 C6 4,9 D6 12
A7 5 B7 12,5 C7 5 D7 12,1

gli andamenti delle serie B e D sono qualitativamente simili, ma non posso confrontarli a causa degli intervalli di tempo (serie A e C) non omogenei. Quindi per confrontare i valori ad esempio dovrei:
-Aggiungere una cella nelle colonne A e B: inserire il valore A2=1,5 e fare un'interpolazione lineare tra B2 e B1 che assegno alla nuova cella B2. E ripetere questo procedimento per ogni riga in cui A>C. Se invece A<C bisogna inserire la cella nelle colonne C e D e fare l'interpolazione. E' il caso della riga successiva in cui A3>C3: aggiungo una cella sotto C3 e D3, pongo C3=A3=3,2 e interpolo linearmente tra D4 e D3 ottenendo D3=(D3+D4)/2.
Devo automatizzare questo procedimento. :-?
Come posso avere quel tool che mi dicevi nel post precedente? altrimenti a chi mi posso rivolgere? ti ringrazio infinitamente...non pensavo ci fosse qualcuno dietro un pc a quest'ora, d'estate... oltre me.... :cry:
andreaing84
Utente Junior
 
Post: 12
Iscritto il: 07/08/12 13:52

Re: Macro Excel 2010

Postdi wallace&gromit » 07/08/12 15:15

Ho caricato il file omdimath.xll a questo link
https://rapidshare.com/files/1314166352/omdimath.xll , si installa in excel selezionando strumenti/componenti aggiuntivi.
Permette di definire un nuovo range e riempire con vari tipi di interpolazione i dati mancanti dal range di origine.

P.S. il vantaggio di questi giorni d'estate è che non c'è il capo dietro a chi è dietro al PC!
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: Macro Excel 2010

Postdi Bebo » 07/08/12 15:18

ok, non avevo capito il problma. :oops:
ora ci ragiono su un pò, lavoro permettendo, e ti rispondo appena possibile.
wallace è un grande, spero mi anticipi ;)
Bebo
Utente Junior
 
Post: 11
Iscritto il: 02/08/12 09:39

Re: Macro Excel 2010

Postdi andreaing84 » 07/08/12 15:26

omdimath.xll non viene riconosciuto da excell come componente valido...
mi tocca provare sul pc di qualcuno che abbia office 2003... grazie comunque!!!
nel frattempo rimango in standby...mangiandomi un altro pò le cervella! :D
grazie e buon lavoro!
andreaing84
Utente Junior
 
Post: 12
Iscritto il: 07/08/12 13:52

Re: Macro Excel 2010

Postdi Bebo » 07/08/12 15:29

come mi comporto se a=c?
e se a=c ma b è diverso da d?
Bebo
Utente Junior
 
Post: 11
Iscritto il: 02/08/12 09:39

Re: Macro Excel 2010

Postdi wallace&gromit » 07/08/12 15:33

Bebo ha scritto:wallace è un grande
sono commosso, purtroppo vedo che
andreaing84 ha scritto:omdimath.xll non viene riconosciuto da excell come componente valido
e, come detto, ho provato a cercare un link in rete (nella speranza di trovare qualcosa di aggiornato) ma non lo trovo più. Era un pezzo che non usavo più neanche questa funzione e ho dovuto rituffarmici: per chi riuscisse ad installarlo, una volta installato si hanno a disposizione le varie formule, quella che uso io è per esempio
Codice: Seleziona tutto
=Linear_Interpolate2(I$1:I$20;A$1:A$20;B$1:B$20)
dove in colonna I ho il nuovo range di date, in A ho la data di partenza e B i valori.
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: Macro Excel 2010

Postdi andreaing84 » 07/08/12 17:49

Perfetto wallace! ho trovato un pc con offiss 2003!
ho installato il tool aggiuntivo...ho provato ad utilizzarlo ma....non ci ho capito nulla! :) potresti spiegarmi cortesemente?

Per Bebo:
se a=c : nessuna operazione in quanto i valori delle colonne B e D sono direttamente confrontabili.
andreaing84
Utente Junior
 
Post: 12
Iscritto il: 07/08/12 13:52

Re: Macro Excel 2010

Postdi Anthony47 » 08/08/12 01:27

Il mio suggerimento e' che ti crei una nuova serie dei tempi, riportando in questa serie i valori crescenti che trovi in col A e col C. Lo puoi fare con una formula:
-metti in F2 il valore piu' basso che hai in col A e C; lo puoi fare "a occhio" oppure con una formula tipo
Codice: Seleziona tutto
=se(A1>C1;C1;A1)

-in F3 inserisci la formula
Codice: Seleziona tutto
=PICCOLO((A:A;C:C);1+CONTA.SE(A:A;"<="&F2)+CONTA.SE(C:C;"<="&F2)+SE(VAL.ERRORE(F2);99999;0))

-copia F3 nelle celle sottostanti, e avrai la serie di tempi crescenti
A questo punto in G2 e sottostanti riporti i dati della prima serie con la formula
Codice: Seleziona tutto
=SE(VAL.ERRORE(CERCA.VERT(F2;A:B;2;0));"";CERCA.VERT(F2;A:B;2;0))

Mentre in H2 e sottostanti riporti la seconda serie con la formula
Codice: Seleziona tutto
=SE(VAL.ERRORE(CERCA.VERT(F2;C:D;2;0));"";CERCA.VERT(F2;C:D;2;0))


Infine puoi creare in col I e J le serie finali, riportando i dati da G e H (se esistono) oppure da interpolazione.

Spero sia di qualche utilita'.

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro Excel 2010

Postdi andreaing84 » 08/08/12 08:45

Ciao Antony47,
ti ringrazio infinitamente per il tuo supporto, problema risolto! Vorrei tanto capire cosa c'è dentro le righe ma il tempo è una canaglia! Dovrei mettermi a studiare excel comunque...nel frattempo avevo elaborato qulcosa di simile in matlab, ma l'importazione dei dati mi porta via un pò di tempo. Quindi ora attendo la risposta di wallace sulle spiegazioni del tool per excel 2003. Vorrei implementare il tuo metodo per renderlo ripetibile "velocemente" su più fogli di calcolo: magari metto tutti i dati su un foglio e uso le tue formule a ripetizione tramite macro.
Grazie ancora.
andreaing84
Utente Junior
 
Post: 12
Iscritto il: 07/08/12 13:52

Re: Macro Excel 2010

Postdi wallace&gromit » 09/08/12 07:25

ciao andreaing,
una volta installato il componente aggiuntivo hai a disposizione un sacco di formule (la gran parte delle quale non ho mai provato ad usare!), trovi l'elenco se in una cella usi inserisci funzione e selezioni OMDIMATH come criterio di ricerca.
Quella che serve al caso descritto è quella che ho riportato nel mio post precedente: =linear_interpolate2 (la usi come una qualsiasi formula preimpostata da excel) specificando i range che fanno al caso tuo.
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: Macro Excel 2010

Postdi andreaing84 » 09/08/12 12:55

Carissimi, ho bisogno ancora del vostro aiuto. Come posso interpolare i valori che ho trovato con le formule suggerite da Antony47 in modo automatico? ovvero, dati due valori (iniziale e finale) devo dire a excel: conta il numero delle celle vuote che ci sono in mezzo, prendil valore massimo, dividilo per il numero delle celle (trovando il coefficiente angolare della retta interpolante) e sottrai fino a giungere nella cella del valore minimo. Questo procedimento è improponibile se lo devo fare per ogni "buco" che trovo nella serie. Mi date una mano? se potessi postare una foto riuscirei a spiegarmi meglio....
andreaing84
Utente Junior
 
Post: 12
Iscritto il: 07/08/12 13:52

Re: Macro Excel 2010

Postdi andreaing84 » 09/08/12 13:11

andreaing84
Utente Junior
 
Post: 12
Iscritto il: 07/08/12 13:52

Re: Macro Excel 2010

Postdi wallace&gromit » 09/08/12 21:58

e quei valori di Y sono temperature?
È roba che scotta!!!
A questo punto penso che serva una macro, vediamo se qualcuno te la può preparare (io ci ho provato ma mi sono arenato).
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: Macro Excel 2010

Postdi Flash30005 » 10/08/12 00:03

Avresti fatto meglio ad inviare il file
L'immagine mi confonde le idee
Dici
andreaing84 ha scritto: conta il numero delle celle vuote che ci sono in mezzo, prendil valore massimo, dividilo per il numero delle celle

E vedo (quando c'è) solo una cella vuota
esempio
X............Y1...........Y2
8,101824 27717742 116000000
8,400968 (vuota) 125000000

Quindi?

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Macro Excel 2010

Postdi Anthony47 » 10/08/12 00:52

Quindi la domanda verte su come eseguire l' interpolazione, dove un po' pensavo che fossi autosufficiente (il problema era ricreare un asse dei tempi condiviso tra le due grandezze, il tuo "asse di riferimento") un po' pensavo che l' avrebbe risolto omdimath.xll...
Comunque il mio suggerimento e' questo:
-i tuoi dati sono stati ricreati da F2 a H1500 (la riga 1 e' usata per le intestazioni)
-in I3 calcoli la prossima cella di col G che contiene un valore Y1, con la formula
Codice: Seleziona tutto
=MIN(SE(G3:G$1500>0;RIF.RIGA(G3:G$1500);""))
da confermare con Contr-Maiusc-Enter
-idem in J4 per i dati di col H (Y2), con la formula
Codice: Seleziona tutto
=MIN(SE(H3:H$1500>0;RIF.RIGA(H3:H$1500);""))
(anche questa Contr-Maiusc-Enter)
-in K2 inserisci un valore di origine della nuova Y1, idem in L2 per la serie Y2
-in K3 calcoli il secondo valore di Y1 con la formula
Codice: Seleziona tutto
=SE(I3<>RIF.RIGA();(INDIRETTO(INDIRIZZO(I3;7))-K2)/(INDIRETTO(INDIRIZZO(I3;6))-F2)*(F3-F2)+K2;G3)

-in L3 il secondo valore di Y2 con la formula
Codice: Seleziona tutto
=SE(J3<>RIF.RIGA();(INDIRETTO(INDIRIZZO(J3;8))-L2)/(INDIRETTO(INDIRIZZO(J3;6))-F2)*(F3-F2)+L2;H3)

Copia quindi F3:L3 e incolla verso il basso quanto basta; la tabella finale ha l' asse dei valori X in col F e i valori rivisti per Y1-Y2 in col K-L

Se cosi' funziona, si potra' automatizzare la copia delle formule F3:L3 verso il basso.

Nota che la formula di interpolazione adottata non conta i vuoti ma la variazione di tempo tra la riga corrente e la prossima contenente un dato, rapportandola ovviamente alla variazione della grandezza. Le colonne I e J sono di appoggio, e servono ad evitare di calcolare piu' volte lo stesso valore nella stessa formula (col K-L9)

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro Excel 2010

Postdi andreaing84 » 10/08/12 18:46

Anthony47 ha scritto:Quindi la domanda verte su come eseguire l' interpolazione, dove un po' pensavo che fossi autosufficiente (il problema era ricreare un asse dei tempi condiviso tra le due grandezze, il tuo "asse di riferimento") un po' pensavo che l' avrebbe risolto omdimath.xll...
Comunque il mio suggerimento e' questo:
-i tuoi dati sono stati ricreati da F2 a H1500 (la riga 1 e' usata per le intestazioni)
-in I3 calcoli la prossima cella di col G che contiene un valore Y1, con la formula
Codice: Seleziona tutto
=MIN(SE(G3:G$1500>0;RIF.RIGA(G3:G$1500);""))
da confermare con Contr-Maiusc-Enter
-idem in J4 per i dati di col H (Y2), con la formula
Codice: Seleziona tutto
=MIN(SE(H3:H$1500>0;RIF.RIGA(H3:H$1500);""))
(anche questa Contr-Maiusc-Enter)
-in K2 inserisci un valore di origine della nuova Y1, idem in L2 per la serie Y2
-in K3 calcoli il secondo valore di Y1 con la formula
Codice: Seleziona tutto
=SE(I3<>RIF.RIGA();(INDIRETTO(INDIRIZZO(I3;7))-K2)/(INDIRETTO(INDIRIZZO(I3;6))-F2)*(F3-F2)+K2;G3)

-in L3 il secondo valore di Y2 con la formula
Codice: Seleziona tutto
=SE(J3<>RIF.RIGA();(INDIRETTO(INDIRIZZO(J3;8))-L2)/(INDIRETTO(INDIRIZZO(J3;6))-F2)*(F3-F2)+L2;H3)

Copia quindi F3:L3 e incolla verso il basso quanto basta; la tabella finale ha l' asse dei valori X in col F e i valori rivisti per Y1-Y2 in col K-L

Se cosi' funziona, si potra' automatizzare la copia delle formule F3:L3 verso il basso.

Nota che la formula di interpolazione adottata non conta i vuoti ma la variazione di tempo tra la riga corrente e la prossima contenente un dato, rapportandola ovviamente alla variazione della grandezza. Le colonne I e J sono di appoggio, e servono ad evitare di calcolare piu' volte lo stesso valore nella stessa formula (col K-L9)

Ciao


Funziona! ....sono solo incerto sulla lunghezza della colonna dei miei dati. Sono serie da 1000 dati perciò in proporzione a quanto mi hai indicato per l'esempio dovrei estendere la colonna dei miei dati fino a 65217 valori? per il resto ragionamento impeccabile! GRAZIE
andreaing84
Utente Junior
 
Post: 12
Iscritto il: 07/08/12 13:52

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Macro Excel 2010":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti