Condividi:        

Somma Progressiva 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

Somma Progressiva Excel

Postdi valter1000 » 09/01/10 13:00

Salve,
ho il seguente problema:
in una cella di excel mi arriva un valore che si aggiorna con una certa frequenza.
Ho bisogno di una formula che in un'altra cella mi indichi il valore medio degli ultimi X aggiornamenti.
Grazie
Saluti
Valter
valter1000
Newbie
 
Post: 7
Iscritto il: 09/01/10 12:34

Sponsor
 

Re: Somma Progressiva Excel

Postdi Flash30005 » 09/01/10 14:52

Ciao Valter benvenuto nel Forum

Prova a copiare questa macro e a incollarla in un modulo di excel
Codice: Seleziona tutto
Public Contatore, vettore(100) As Integer
Sub media()
Somma = 0
For calc = 1 To [F1]
Somma = Somma + vettore(calc)
Next calc
mediaS = Somma / Contatore
MsgBox mediaS & " SS " & Somma
Contatore = 0
End Sub


Mentre questo codice lo incollerai nel vba del foglio con i dati
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
Contatore = Contatore + 1
vettore(Contatore) = [A1]
If Contatore >= [F1] Then Call media
End Sub

Ora fai attenzione ho considerato La cella A1 come dato variabile di cui si deve fare la media quindi sostituisci [A1] con la cella del tuo foglio es. [C20] o altro
e in F1 ho inserito il tuo Valore X (gli aggiornamenti, prima di inizio calcolo) quindi anche qui adatta [F1] a una cella libera del tuo foglio

Fai sapere
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: Somma Progressiva Excel

Postdi valter1000 » 09/01/10 19:25

Ciao Flash,
ti ringrazio molto della tua prontissima risposta.
Ho provato ad applicare le macro ma la seconda non riesco ad attivarla (credo).
Sono molto ignorante in fatto di macro.
Mi sono anche accorto che ho sbagliato a porre il mio problema e ti chiedo scusa.
Io non ho bisogno della media degli ultimi es. 10 aggiornamenti ma della somma degli ultimi es. 10 aggiornamenti e bisognerebbe anche che la formula tenesse conto dell'eventuale arrivo di un nuovo dato identico al precedente che non modifica il valore precedente.
Conosci una formula che fa in modo che il nuovo dato che da A arriva in B quando arriva in B crei lo storico, cioè il nuovo dato si metta sempre nella prima cella e scali i dati precedenti di una cella più in basso, in questo modo io potrei fare una formula normale (così eviterei una macro) che mi dia la somma dei valori delle es. prime 10 celle.
Poi periodicamente potrei cancellare le celle oltre la 10.
Ti ringrazio molto per la tua disponibilità.
ciao
Valter
valter1000
Newbie
 
Post: 7
Iscritto il: 09/01/10 12:34

Re: Somma Progressiva Excel

Postdi Flash30005 » 09/01/10 21:08

Ho modificato la macro ma ti invio direttamente il file così, anche se non soddisferà la tua esigenza, avrai una visione del suo funzionamento
http://rapidshare.com/files/332832339/CalcoloSommaDopoNAggiornamenti.xls.html

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: Somma Progressiva Excel

Postdi Anthony47 » 09/01/10 23:31

...ma se i dati provengono da un link dde bisogna lavorare con il metodo "SetLinkOnData"; ci sono state diverse discussioni su questo argomento, ma la "discussione madre" e' questa:
viewtopic.php?f=26&t=46965&start=20#p281675

Vedi se fa al caso tuo, e poi se riesci ad applicare quei suggerimenti.

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

Re: Somma Progressiva Excel

Postdi valter1000 » 10/01/10 12:09

Ciao Flash e ciao Anthony,
grazie Flash per il file che mi hai mandato, ora posso dire di avere visto cosa fa una macro.
La mia necessità però è di avere costantemente visualizzato il valore della somma degli ultimi 10 aggiornamenti e non solo dopo che ne sono avvenuti 10 (e questo lo chiamo problema n. 1).
Ora ho capito di avere anche un'altro problema e cioè che se il dato di partenza arriva via DDE, affinchè la macro si accorga di un eventuale nuovo dato uguale al precedente, serve una procedura speciale chiamata "SetLinkOnData" (e questo lo chiamo problema n. 2).
Ho guardato la discussione madre indicata da Anthony e qualcosa capisco a grandi linee anche se ho provato a copiare i codici in un foglio ma non riesco a combinare nulla.
Vi espongo il mio problema complessivo (probl. n. 1 + probl. n. 2).
Nella mia cella di partenza A1 (che riceve dati via DDE e che contiene la formula =IB|Q!'FE.LAE;Last') c'è un dato che si aggiorna in continuazione, a me serve che questo dato che varia in continuazione venga confrontato con una altro dato che varia in continuazione che sta nella cella A2 (anche qui il dato arriva via DDE; la cella contiene la formula =IB|Q!'FE.LAE;ask') e che se il primo dato è maggiore o uguale al secondo allora un terzo dato che sta in una terza cella A3 (che si aggiorna contemporaneamente con A1; anche qui il dato arriva via DDE; la cella contiene la formula =IB|Q!'FE.LAE;Lastqty') venga messo in una quarta cella A4. Poi di questo dato in A4 che si aggiorna ogni volta che si aggiorna il dato di partenza in A1 ho bisogno di sapere costantemente (magari in una quinta cella A5) il valore della somma degli ultimi es. 10 aggiornamenti (in pratica quando iniziano ad affluire gli aggiornamenti, al primo agg. il valore della somma sarà pari al primo, al secondo agg. sarà pari alla somma del primo con il secondo a così via fino al decimo; dall'undicesimo aggiornamento la somma deve riferirsi ai soli ultimi 10 agg. e ignorare l'undicesimo).
Si può fare?
Grazie
Valter
valter1000
Newbie
 
Post: 7
Iscritto il: 09/01/10 12:34

Re: Somma Progressiva Excel

Postdi Anthony47 » 10/01/10 13:43

Si si puo' fare, ma lo dobbiamo fare insieme anche perche' solo tu puoi collaudare quanto noi suggeriamo.
Il primo passo e' applicare il metodo utilizzato nella "discussione madre" che ti ho linkato per attivare una macro che contiene solo Msgbox("Cambiato A1?") (che dovrai chiudere subito tramite Ok), oppure che contiene Beep (sentirai un beep ogni cambiamento di dato in A1; quando confermi che il msgbox (o il beep) compare ad ogni cambiamento di valore in A1 (e solo al cambiamento di A1), allora potremo procedere con una macro che si dovra' attivare sui cambiamenti di A1 e A2 e che fai il resto di quanto chiedi.

Poiche' il codice generico era
Sub LinkList()
ActiveWorkbook.SetLinkOnData “Nome_Link”, "Macro1"
End Sub

nel tuo caso dovresti inserire questo codice
Codice: Seleziona tutto
Sub LinkList()
    ActiveWorkbook.SetLinkOnData “IB|Q!'FE.LAE;Last'”, "Macro1"   
End Sub

Sub Macro1
Msgbox("Cambiato A1?")
End Sub

Poi lanci la macro LinkList e verifiche che a ogni cambiamento in A1 (e solo al cambiamento) esce il messaggio; dopo i primi test sostituisci Msgbox("Cambiato A1?") con l' istruzione Beep.

Se non funziona come descritto dovrai fare il debug sul tuo ambiente.

Fai sapere dove arrivi, per poter pensare alla fase successiva.

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

Re: Somma Progressiva Excel

Postdi valter1000 » 11/01/10 00:27

Ciao Anthony,
ho provato ma quando il dato si aggiorna non compare il msgbox.
Quando apro il file mi chiede se voglio attivare le macro e gli dico do ok e poi mi chiede se voglio aggiornare i valori e do ok e i valori si aggiornano in continuazione.
Dato che il dato si aggiorna ma non compare la msgbox provo ad attivare la tua macro (nel caso non forre partita) e quando vado ad attivarela da strumenti, macro, esegui si apre la finestra dove avevo incollato la macro e mi da il seguente msg "errore di compilazione errore di sintassi" e se do ok nella formula della macro, Sub LinkList() appare evidenziato in giallo e se chiudo la finestra che contiene la formula, appare un'altra finestra che dice che con questo comando (chiusura) verranno interrotte le operazioni di debug.
Dato che mi sono collegato ad un altro fornitore di dati (IB non va e mi sono collegato a FDF) ho modificato il collegamento DDE ma mi sembra di avere fatto giusto (ho copiato quello che c'è nella cella dove i dati arrivano.
La macro adesso è così:

Sub LinkList()
ActiveWorkbook.SetLinkOnData “FDF|Q!'EURUSD.FX;ask'”, "Macro1"
End Sub

Sub Macro1()
MsgBox ("Cambiato A1?")
End Sub

In pratica ho cambiato -"IB|Q!'FE.LAE;Last'"- con -"FDF|Q!'EURUSD.FX;ask'"-.
I dati arrivano nella cella e si aggiornano.
Ho provato nella seconda macro anche a cambiare il "Cambiato A1?" con "Beep" ma non va.
Bisogna fare il debug che mi avevi anticipato?
grazie
ciao
Valter
valter1000
Newbie
 
Post: 7
Iscritto il: 09/01/10 12:34

Re: Somma Progressiva Excel

Postdi Anthony47 » 11/01/10 00:58

Nella riga di codice ActiveWorkbook.SetLinkOnData “IB|Q!'FE.LAE;Last'”, "Macro1" sono sbagliati gli "apici" attorno al link dde; sostituisci con questa riga e riprova:
Codice: Seleziona tutto
    ActiveWorkbook.SetLinkOnData "IB|Q!'FE.LAE;Last'", "Macro1"

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

Re: Somma Progressiva Excel

Postdi valter1000 » 11/01/10 13:48

Ciao Anthony,
funziona, ho anche messo la scritta Beep e funziona, ma la msgbox si apre sia quando cambia il dato della cella che mi interessa e anche quando cambia un qualsiasi altro dato presente nel foglio (un qualsiasi dato collegato al DDE).
Esiste una soluzione?
grazie
ciao
Valter
valter1000
Newbie
 
Post: 7
Iscritto il: 09/01/10 12:34

Re: Somma Progressiva Excel

Postdi Anthony47 » 12/01/10 00:27

Se questo e' il funzionamento ti suggerisco di copiare il dato di A1 in una cella libera e poi usare questo valore nella macro1 per determinare se il valore e' cambiato oppure no.

Per quanto riguarda ora le operazioni di Macro1:
-decidi di usare una colonna libera per memorizzare i 10 valori piu' recenti; supponiamo che sia la H, da H2 ad H11; i dati verranno accumulati "in coda" ai preesistenti, e se l' ultima posizione occupata e' superiore a riga 11 allora si copia H3:H12 in H2 e si azzera H12:H1000.

In I2 inserirai la formula che fa i calcoli che ti servono sui dati H2:H11.

La domanda e': che cosa di questo sai mettere in piedi autonomamente e su che cosa ti serve aiuto.

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

Re: Somma Progressiva Excel

Postdi valter1000 » 13/01/10 22:17

Ciao Anthony,
grazie per il prezioso aiuto che mi stati dando.
Allora, dopo avere raffreddato i neuroni ho messo giù il procedimento che mi serve, ed è il seguente:
- In A1, C1, D1, E1 i dati arrivano via DDE;
- In B1 copio A1 (in modo che la macro non scatti quando cambia un qualsiasi dato DDE, giusto?);
- Se B1>=E1 allora C1 va messo in F1 con colore VERDE ma se B1=0 lo ignoro;
- Se B1<=D1 allora C1 va messo in F1 con colore ROSSO ma se B1=0 lo ignoro;
- Ogni nuovo dato che arriva in F1 sposta i precedenti verso il basso di una cella (non so se si può scalare in basso all'infinito o se è meglio per esempio scalare in basso fino a F300 e poi cancellare da F301 in giù; fino a F300 mi basterebbe);
- In G1 ci vuole una formula che mi dia la sommatoria di tutti i numeri VERDI da G1 a G10;
- In H1 ci vuole una formula che mi dia la sommatoria di tutti i numeri ROSSI da G1 a G10.
Di tutto questo so fare solo due cose: copiare A1 in B1 (in B1 metto =A1) e so scrivere correttamente i link DDE (con gli apici giusti).
Tutto il resto è buio.
Grazie ancora
Ciao Valter
valter1000
Newbie
 
Post: 7
Iscritto il: 09/01/10 12:34

Re: Somma Progressiva Excel

Postdi Anthony47 » 14/01/10 01:46

Di tutto questo so fare solo due cose: copiare A1 in B1 (in B1 metto =A1)
Un po' poco, e anche questo e' sbagliato, perche' la copia la devi fare nella macro altrimenti A1 e B1 sarebbero sempre uguali e risulterebbe difficile individuare i cambiamenti...

Non e' difficile, ci devi provare, anche perche' altrimenti ti troveresti con una soluzione che dovresti buttare appena cambia una cella.

In linea di massima questa macro accumula gli ultimi 10 valori di A1 in H2:H11, usando B1 come cella di servizio per identificare il reale cambiamento di A1:
Codice: Seleziona tutto
Sub Macro1()
If Range("A1").Value = Range("B1").value then Exit Sub
'Qui metti altri controlli che subordinano l' accumulo di A1 in colonna H **1
'
'Istruzioni per accumulo in col H:
PRH=Range("H1000").End(xlUp).offset(1,0).Row +1
Range("A1").copy Destination:=Range("H" & PRH)     '<<<
If PRH >11 then
Range("H3:H12").copy Destination:=Range("H2")
Range("H12:H1000").Clearcontents
'
Range("B1").Value = Range("A1").Value    'Aggiorni B1
End Sub
E' in sostituzione di Macro1 che fa beep.
Prova ad aggiungere gli altri controlli che ti servono dopo la riga marcata **1, e se invece di A1 vuoi accantonare un' altra grandezza, aggiorna l' istruzione marcata <<<.

In G2 metti la formula che fa i calcoli che ti servono sui dati H2:H11.

Se hai problemi posta ancora spiegando dove sei arrivato.

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

Re: Somma Progressiva Excel

Postdi valter1000 » 17/01/10 12:44

Ciao Anthony,
ti scrivo quello che ho capito.
Per attivare il collegamento al DDE metto questa macro:
Sub LinkList()
ActiveWorkbook.SetLinkOnData “link DDE di cella A1”, "Macro1"
End Sub
Per accodare il dato di A1 in colonna H metto questa sub macro:
Sub Macro1()
If Range("A1").Value = Range("B1").value then Exit Sub
PRH=Range("H1000").End(xlUp).offset(1,0).Row +1
Range("A1").copy Destination:=Range("H" & PRH)
If PRH >11 then
Range("H3:H12").copy Destination:=Range("H2")
Range("H12:H1000").Clearcontents
Range("B1").Value = Range("A1").Value
End Sub
In questo modo ottengo gli aggiornamenti di A1 incolonnati in H2:H11, giusto?
Cosa sbaglio?
Grazie
Ciao
Valter
valter1000
Newbie
 
Post: 7
Iscritto il: 09/01/10 12:34

Re: Somma Progressiva Excel

Postdi Anthony47 » 17/01/10 19:16

In linea di massima quello che hai scritto e' giusto.
La prima macro (LinkList) e' la stessa che usavi per fare beep, infatti la modifica e' nella "Macro1", che invece di fare beep ora fa una cosa piu' complessa.
Cosa sbaglio?
Cosa hai fatto? che cosa e' successo?

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


Torna a Applicazioni Office Windows


Topic correlati a "Somma Progressiva Excel":


Chi c’è in linea

Visitano il forum: Nessuno e 32 ospiti