Somma valori in una colonna a partire dall'ultimo valore non negativo

Anonimo
2020-06-02T19:25:37+00:00

in una colonna ho una serie di valori, sia positivi che negativi e vorrei sommare i valori positivi 

presenti dopo l'ultimo valore non negativo.

Tento di spiegare meglio:

data una tabella dove nella colonna A sono presenti valori positivi negativi e nulli (zero)

Esempio: 

colonna A

riga 1,2,3,6,,7,8,9,10, ecc., ecc. fino a 500 sono presenti i seguenti valori in ordine (A1,A2,A3 e cosi via):

1,2,-3,2,-1,1,0,2,-5,7,8

la somma deve essere 15 che si ottiene sommando i valori a partire primo valore dopo quello <= 0 cioè 7 e 8  

se fosse:

1,2,-3,2,-1,1,0,2,5,7,8 in questo caso il valore della somma sarebbe 22 che si ottiene sommando 2 5 7 8 

Grazie per qualunque dritta...

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-06-02T23:37:54+00:00

Ciao Mykia55,

la funzione di Norman, che ringrazio, è la soluzione al problema così come lo avevo posto.

Adesso visto che l'appetito vien mangiando… propongo una variante al mio quesito:

mettiamo adesso, che la colonna A sia il controllo dei numeri negativi , positivi oppure

nulli (=0) e che io voglia sommare i numeri che si trovano nella colonna attigua alla A cioè la B

per esempio :

mettiamo che in a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 (e cosi via fino ad a500)

ho la serie precedente e cioè 1,2,-3,2,-1,1,0,2,-5,7,8

e nelle corrispondenti B1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 (e cosi via fino a b500) 

ho per esempio la serie :1, 0, 0, -1,-2,5,8,2,1,7,10  vorrei che il calcolo, di cui sopra 

fosse fatto nella colonna B con rifrimento alla colonna A

e che quindi il risultato sia 17 e non 33 vale a dire i numeri positivi in colonna A

(A10 e A11) fanno si che io sommi i corrispettivi b10 e b11 cioè 7 e 10 e non b6---b11

ho cercato di utilizzare la formula matriciale di francocon..res ma non ci sono riuscito.

nella cella dove metto la formula e ctrl+shift ed invio viene zero.

Un grazie per la vostra attenzione

Prova la seguente versione del codice:

'========>>

Option Explicit

'------>>

Public Function mySum(rIntervallo As Range) As Double

    Dim i As Long, j As Long

    Dim iCtr As Long, jCtr As Long

    Dim bFlag As Boolean

    With rIntervallo

        iCtr = .Columns(1).Cells.Count

        If rIntervallo.Cells(iCtr, 1) <= 0 Then

            Exit Function

        End If

        For i = iCtr To 2 Step -1

            jCtr = jCtr + 1

            bFlag = .Cells(iCtr - jCtr, 1).Value <= 0

            If bFlag Then

                For j = i To iCtr

                    mySum = mySum + .Cells(j, 2)

                Next j

                Exit For

            End If

        Next i

    End With

End Function

'<<========

Potresti scaricare il mio file di prova Mykia20200603.xlsm

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

10 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2020-06-02T23:05:51+00:00

    la funzione di Norman, che ringrazio, è la soluzione al problema così come lo avevo posto.

    Adesso visto che l'appetito vien mangiando… propongo una variante al mio quesito:

    mettiamo adesso, che la colonna A sia il controllo dei numeri negativi , positivi oppure

    nulli (=0) e che io voglia sommare i numeri che si trovano nella colonna attigua alla A cioè la B

    per esempio :

    mettiamo che in a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 (e cosi via fino ad a500)

    ho la serie precedente e cioè 1,2,-3,2,-1,1,0,2,-5,7,8

    e nelle corrispondenti B1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 (e cosi via fino a b500) 

    ho per esempio la serie :1, 0, 0, -1,-2,5,8,2,1,7,10  vorrei che il calcolo, di cui sopra 

    fosse fatto nella colonna B con rifrimento alla colonna A

    e che quindi il risultato sia 17 e non 33 vale a dire i numeri positivi in colonna A

    (A10 e A11) fanno si che io sommi i corrispettivi b10 e b11 cioè 7 e 10 e non b6---b11

    ho cercato di utilizzare la formula matriciale di francocon..res ma non ci sono riuscito.

    nella cella dove metto la formula e ctrl+shift ed invio viene zero.

    Un grazie per la vostra attenzione

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2020-06-02T21:38:16+00:00

    ciao

    Norman ( seguo sempre le tue risposte)

    anche la tua UDF sfalsa se l'ultimo numero è negativo

    come noti da 2 come risultato

    per me dovrebbe essere 0 o al limite 3

    2
    2
    -1
    3
    4
    -5
    6
    8
    -9
    2
    2
    1
    1
    -1
    1
    1
    1
    -1
    2

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2020-06-02T21:18:53+00:00

    Ciao

    ti metto una formula matriciale (se non hai il 365)

    CTRL MAIUSCOLO INVIO

    =SOMMA(INDIRETTO(INDIRIZZO(1;MAX(SE(A1:AA1<0;RIF.COLONNA(A:AA)))+1)&":"&INDIRIZZO(1;MAX(SE(A1:AA1<>"";RIF.COLONNA(A:AA))))))

    io ho usato fino alla colonna AA puoi aumentarle

    questa per le righe

    =SOMMA(INDIRETTO(INDIRIZZO(MAX(SE($A$1:$A$1:$A$3000<0;RIF.RIGA($A$1:$A$3000)))+1;1)&":"&INDIRIZZO(MAX(SE($A$1:$A$1:$A$3000<>"";RIF.RIGA($A$1:$A$3000)));1)))

    Nb

    ti devi gestire se l'ultimo valore è negativo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-06-02T20:42:27+00:00

    Ciao Mykia55,

    in una colonna ho una serie di valori, sia positivi che negativi e vorrei sommare i valori positivi 

    presenti dopo l'ultimo valore non negativo.

    Tento di spiegare meglio:

    data una tabella dove nella colonna A sono presenti valori positivi negativi e nulli (zero)

    Esempio: 

    colonna A

    riga 1,2,3,6,,7,8,9,10, ecc., ecc. fino a 500 sono presenti i seguenti valori in ordine (A1,A2,A3 e cosi via):

    1,2,-3,2,-1,1,0,2,-5,7,8

    la somma deve essere 15 che si ottiene sommando i valori a partire primo valore dopo quello <= 0 cioè 7 e 8  

    se fosse:

    1,2,-3,2,-1,1,0,2,5,7,8 in questo caso il valore della somma sarebbe 22 che si ottiene sommando 2 5 7 8 

    Grazie per qualunque dritta...

    Potresti sfruttare una UDF (funzione utente) che può essere utilizzata come una funzione nativa di Excel.

    Quindi, prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

     '========>>

    Option Explicit

    '------>>

    Public Function mySum(rIntervallo As Range) As Double

        Dim i As Long, j As Long

        Dim iCtr As Long, jCtr As Long

        Dim bFlag As Boolean

        With rIntervallo

            iCtr = .Cells.Count

            For i = iCtr To 2 Step -1

                jCtr = jCtr + 1

                bFlag = .Cells(iCtr - jCtr).Value <= 0

                If bFlag Then

                    For j = i To iCtr

                        mySum = mySum + .Cells(j)

                    Next j

                    Exit For

                End If

            Next i

        End With

    End Function

    '<<========

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel
    • Salva il file con l’estensionexlsm

             

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento