Riferimento ultimo valore
Hai un problema con Excel? 
Riferimento ultimo valore
di Santuberto (utente non iscritto) data: 12/03/2013 18:49:06
Buongiorno a tutti. Ho provato a cercare nello “storico discussioni”, ma non ho trovato nulla, per cui provo a chiedere aiuto. Nelle celle della colonna C, inserisco ogni giorno un dato. Nella colonna E, sulla stessa riga, desidero avere la somma dell’ultimo dato inserito e di quello del giorno precedente. Il problema, come evidenziato nel file allegato, nasce quando si saltano alcuni giorni. Un aiuto? Grazie mille.
di totygno71 data: 12/03/2013 19:22:52
In formule o codice?
Riferimento ultimop valore
di Santuberto (utente non iscritto) data: 12/03/2013 19:36:05
Sicuramente in formule. Con il codice avrei grossi problemi.
di totygno71 data: 12/03/2013 19:58:18
Somma.se nidificato???
di Santuberto (utente non iscritto) data: 12/03/2013 20:10:35
Grazie della risposta. Non capisco cosa significa nidificato. Il somma.se lo uso normalmente, ma nidificato cosa significa?
Riferimento ultimo valore
di Santuberto (utente non iscritto) data: 12/03/2013 20:24:26
Ho fatto una ricerca in internet, ed ho capito il significato di “nidificato”. Adesso, però, dovrei riuscire a nidificare la funzione, ma non so proprio come fare ( … e nemmeno con somma.se oppure somma.più.se o altre).
di Vecchio Frac data: 12/03/2013 21:13:41
Intanto che provi a cercare una soluzione con formule io ti fornisco una soluzione con codice VBA.
Per riprendere il tuo file di esempio, nella cella E10 di foglio1 scrivi =SOMMA_CON_PRECEDENTE(C10) e otterrai il risultato voluto.
Banalmente, la funzione prende in argomento la cella di colonna C che contiene l'ultimo valore inserito, da sommare al precedente, e scorre quindi il range di celle verso l'alto a partire da quella posizione finchè non trova un valore non vuoto da sommare, e poi si ferma.
Non produce un risultato corretto se metti la formula nella prima cella del range.
In questa forma grezza non produce parimenti un risultato corretto neanche se prima della cella in cui posizioni la formula c'è un valore, perchè lo shift verso l'alto fa schizzare il cursore alla prima cella piena del range. Si può ovviare ma ci si può anche accontentare, sapendolo :)
Però produce il risultato corretto per le successive celle, basta copiare la formula nella cella dove desideri compaia la somma col valore precedente.
Allego la mia versione del file con la function già impostata.
Function somma_con_precedente(r As Range) As Single
Dim cell As Range, somma As Single
somma = r
For Each cell In r.End(xlUp)
If Trim(cell) <> "" Then
somma = somma + cell
Exit For
End If
Next
somma_con_precedente = somma
End Function
|
di totygno71 data: 12/03/2013 21:18:59
Ne sai una piu di Beppe Grillo!
bhahahhaha
di Vecchio Frac data: 12/03/2013 21:34:40
Non sono del tutto sicuro che questo sia un complimento :)
Riferimento ultimo valore
di Santuberto (utente non iscritto) data: 13/03/2013 08:56:27
Buon inizio di giornata a tutti. Un grazie a Totygno71 ed a Vecchio Frac. Ho inserito la macro (a me incomprensibile), ma oltre che nella prima cella del range, non funziona correttamente in molte altre celle. Per chiarire ho allegato un file. Inoltre, il file che ho allegato è solo un file d’esempio. nella realtà, dovrei applicare la soluzione (possibilmente con formula excel) in un altro file molto più grande, dove vorrei formattare 344 celle. Ho provato con “SE”, “SOMMA.SE”, “SOMMA.PIU.SE” ed altre, ma non trovo soluzioni che funzionano.
Riferimento ultimo valore
di Santuberto (utente non iscritto) data: 13/03/2013 09:01:40
Ho persino sbagliato ad allegare un file. Il penultimo che ho allegato, è una bozza riferita ad un altro problema. Se è possibile eliminarlo ... Grazie
di Vecchio Frac data: 13/03/2013 10:04:55
Ho riscritto la function per adattarla ai diversi casi.
Adesso dovrebbe funzionare come richiesto: ogni cella viene sommata alla precedente e, se questa è vuota, si risale su per il range fino alla prima cella non vuota, non si solleva più errore se siamo arrivati a inizio range o se si incontra un valore non numerico.
Riporto sia il codice, sia un file allegato ("per santuberto - 2.xls") in cui ho applicato la formula ai dati esistenti. Se vuoi approfondire ti commento il codice passo passo, potrebbe essere interessante.
Function somma_con_precedente(r As Range) As Variant
Dim cell As Range, somma As Single
If Trim(r) = "" Then
somma_con_precedente = ""
Exit Function
End If
somma = r
If Trim(r.Offset(-1)) <> "" Then
somma_con_precedente = r + r.Offset(-1)
Exit Function
End If
On Error Resume Next
For Each cell In r.End(xlUp)
If Trim(cell) <> "" Then
somma = somma + cell
Exit For
End If
Next
somma_con_precedente = somma
End Function |
di totygno71 data: 13/03/2013 10:21:59
Ti mando il file di esempio con i se nidificati... Ma con questa soluzione si possono inserire massimo 7 condizioni... se vuoi andare oltre usa il codice come giustamente suggerito da VF!
Riferimento ultimo valore
di Santuberto (utente non iscritto) data: 13/03/2013 10:28:01
Ho inserito la macro con Alt+F11 e tutto ha funzionato perfettamente (sembra una cosa miracolosa). Poi ho chiuso il file (salvato come cartella di lavoro con attivazione macro di Excel), l’ho riaperto e non funziona nulla. Ho provato a reinserire la macro con Alt+F11, ma non vuol saperne di funzionare. In fin dei conti, mi rendo conto che con il VBA sono a zero, per cui non mi meraviglio di quello che combino. Mi potresti dare un ultimo consiglio? Credimi, non vorrei d’are l’impressione del rompi… Un saluto.
Riferimento ultimo valore
di Santuberto (utente non iscritto) data: 13/03/2013 10:36:04
Per Totygno71. Grazie mille. Ho provato anch’io con una formula come la tua, ma il fatto è che devo formattare 347 celle. Può accadere che per qualche motivo (es. ferie) che si saltino diversi giorni, per cui …
di Vecchio Frac data: 13/03/2013 10:51:32
Io penso che tu debba avere le macro attivate affinché la formula funzioni.
Cosa significa che non funziona più nulla?
Hai provato il file che ho allegato?
Hai inserito il codice in un modulo?
Hai ricopiato la formula nelle celle dove serve?
Hai indicato come parametro della funzione la cella che contiene il dato nella stessa riga su cui si trova? cioè: per avere la somma della cella in C13 con la cella precedente, devi porre la formula in D13: =SOMMA_CON_PRECEDENTE(C13)
di Santuberto (utente non iscritto) data: 13/03/2013 11:07:22
Hai provato il file che ho allegato?
Hai inserito il codice in un modulo?
Hai ricopiato la formula nelle celle dove serve?
Hai indicato come parametro della funzione la cella che contiene il dato nella stessa riga su cui si trova? cioè: per avere la somma della cella in C13 con la cella precedente, devi porre la formula in D13: =SOMMA_CON_PRECEDENTE(C13
---------------------------------------------------------------------------
Posso assicurarti che ho controllato e ricontrollato. Il fatto è che non riesco più a farla funzionare. Ho quindi provato su un nuovo file, e questo funziona benissimo anche se lo chiudo e lo riapro. Dal momento che i files precedenti, erano solo un esempio, quello che conta, è è che funzioni il file sul quale devo attivare la macro.
Incrociamo le dita.
di Vecchio Frac data: 13/03/2013 11:32:22
No, non incrociamole... verifichiamo esattamente cosa c'è che non va, non esiste che Excel faccia quel che vuole :)
di Santuberto (utente non iscritto) data: 13/03/2013 11:38:54
Bene! Hai ragione. Ora, però, non funziona più nemmeno il file che ho chiamato A BIS MACRO 2 e che allego. Per quale motivo funziona quando vuole? Come puoi controllare, ho fatto tutto correttamente, però ... non funziona.
di Vecchio Frac data: 13/03/2013 11:51:55
Purtroppo Excel non ricalcola automaticamente le functions definite dall'utente.
Ti serve aggiungere un altro pezzo di codice, intercettare l'evento Change del foglio dove si trovano le formule e forzare il ricalcolo.
Torna nell'editor di codice, accedi al foglio (Foglio1?) dove si trovano le formule =somma_con_precedente(), quindi incolla il codice che segue.
Private Sub Worksheet_Change(ByVal Target As Range)
Application.CalculateFull
End Sub
|
di Santuberto (utente non iscritto) data: 13/03/2013 12:08:01
Ho provato a copiare quanto hai scritto, nel modulo che avevo già, ma non cambia nulla. Ora nel modulo risulta:
Function somma_con_precedente(r As Range) As Variant
Dim cell As Range, somma As Single
If Trim(r) = "" Then
somma_con_precedente = ""
Exit Function
End If
somma = r
If Trim(r.Offset(-1)) <> "" Then
somma_con_precedente = r + r.Offset(-1)
Exit Function
End If
On Error Resume Next
For Each cell In r.End(xlUp)
If Trim(cell) <> "" Then
somma = somma + cell
Exit For
End If
Next
somma_con_precedente = somma
End Function
Private Sub Worksheet_Change(ByVal Target As Range)
Application.CalculateFull
End Sub
Però non va.
di Vecchio Frac data: 13/03/2013 12:13:16
No, l'ultimo pezzo di codice non va nel modulo, ma nel codice del foglio. si tratta di zone di codice diverse e aventi funzioni diverse. Per aprire l'area codice del foglio devi premere Alt-F11, quindi Ctrl-R per la finestra progetti, quindi fare doppio clic sul nome del foglio che ti interessa.
Quindi incollare lì il codice
Worksheet_Change(ByVal Target As Range)
con quel che segue.
di Santuberto (utente non iscritto) data: 13/03/2013 12:32:38
Fatto. Ora ho visto come e dove scrivere, ma sono sempre nella stessa situazione. Ma a te, funziona? In fin dei conti, seguendo le tue istruzioni, sembrerebbe semplice. Ho scritto l'ultima parte in Foglio 1 (foglio1) (dove ci sono le finestre Worksheet e change), mentre la parte precedente si trova in Modulo1.
di Vecchio Frac data: 13/03/2013 15:00:15
Sì, a me funziona correttamente... Allego il file "per santuberto - 3" dove ho impostato questo codice solo per il Foglio1 (e non per il foglio "A"); per cui aggiungendo o togliendo valori nelle celle vuote si aggiustano gli altri di conseguenza, ma solo nel foglio1, così la differenza col foglio "A" dove questo non accade.
di Santuberto (utente non iscritto) data: 13/03/2013 15:42:19
Grazie mille. Finalmente! Chiaro che da solo non avrei mai potuto arrivarci. Un'ultima informazione: la presenza di macro, può appesantire un file e rallentare l'elaborazione dei dati? Ancora grazie
di Vecchio Frac data: 13/03/2013 16:54:52
Le macro vengono codificate nel file, lo ingrandiscono ma di pochissimi KB. Non è il puro codice VBA che incide sul peso totale di un file. Nè la semplice presenza del codice rallenta l'esecuzione delle altre formule, chiaramente quando il codice viene richiamato ed eseguito deve essere considerato il tempo dell'elaborazione.
di Santuberto (utente non iscritto) data: 13/03/2013 16:57:23
Chiaro ed esaustivo come sempre. Ancora un ringraziamento per la preziosa collaborazione. Santuberto
Vuoi Approfondire?