Somma condizionata



  • Somma condizionata
    di Marek17 (utente non iscritto) data: 28/08/2009

    Ciao a tutti,
    sto lavorando su un database, in particolare su due colonne: 1)colonna a "contatore" dove vi è un id per ogni cella..da 1 fino a 1536; 2) colonna b di valori che io voglio sommare; inoltre ho un'altra cella x con un valore di riferimento (es.=8). io vorrei sommare i valori della colonna b fino alla cella n (con n=valore di riferimento della cella x), poi vorrei sommare i valori dalla cella x+1 fino alla cella 2x, poi i valori dalla cella 2x+1 fino alla cella 3x.....per essere più chiaro, se x fosse uguale a 8, io vorrei sommare le celle di 8 in 8...e se cambiassi il valore di riferimento in 9 vorrei che le somme fossero di 9 in 9.
    spero di essermi spiegato, e ringrazierò in eterno qualche anima buona che mi aiuterà.



  • di Ricky53 data: 28/08/2009

    Ciao,

    prova con questa macro.
    all'interno trovi delle spiegazioni.

    per andare nell'editor del vba "alt+f11", poi inserisci un modulo e copia le istruzioni che ti ho inviato.

    ciao da ricky53
     
    Option Explicit
    'Definizione delle variabili usate nella macro
    Dim I As Long, J As Long, K As Long, UR As Long, Somma As Long, Valore As Integer
    
    Sub Somma_per_Valore()
    'Cancella le "Somme" presenti nella Colonna "C"
        UR = Range("C" & Rows.Count).End(xlUp).Row
        Range("C1:C" & UR).ClearContents
        
    ' In "D1" c'è il valore che indica quante celle sommare
        Valore = [D1]
        J = 1
        K = 1
        Somma = 0
    ' Nella Colonna "B" ci sono i Valori da sommare
        UR = Range("B" & Rows.Count).End(xlUp).Row
        
        For I = 1 To UR
            If J <= Valore Then
                Somma = Somma + Cells(I, 2)
                J = J + 1
            Else
    ' Nella Colonna "C" vengono scritte le somme
                Cells(K, 3) = Somma
                K = K + 1
                J = 2
                Somma = Cells(I, 2)
            End If
        Next I
        If J = Valore Then
            Cells(K, 3) = Somma
        Else
            MsgBox "I dati presenti non sono un multiplo intero del Valore: " & Valore & Chr(13) _
            & Chr(13) & " La somma è stata eseguita fino all'ultimo multiplo intero"
        End If
    End Sub



  • di Marek17 (utente non iscritto) data: 31/08/2009

    Grazie. sono riuscito a risolvere il mio problema con una soluzione meno raffinata ma efficace, cmq terrò in considerazione il tuo suggerimento.



  • di Ricky53 data: 02/09/2009

    Ciao,
    bene. non esiste una sola soluzione per ogni problema.
    che soluzione hai adottato?

    ciao da ricky53



  • di Marek 17 (utente non iscritto) data: 03/09/2009

    Non ho utilizzato una macro. ho diviso la colonna contatore order per il n°rif è ho messo i risultati in una colonna affianco. poi ho calcolato con la funzione int i valori della colonna appena calcolata e li ho messi affianco. quindi mi veniva una colonna* con una serie di 1 (pari al n°rif) poi 2, 3 e così via. a questa colonna corrispondeva la colonna di valori da sommare...quindi utilizzando la funzione "somma.se" ho ottenuto il risultato che volevo. gli ho detto di sommare i valori fino a che nella colonna* avevo 1, poi sommare fino a quando avevo 2 e così via...con un semplice copia incolla ho esteso la funzione a tutta la colonna di valori.