Somma solo se



  • Somma solo se
    di gava (utente non iscritto) data: 11/09/2015 21:20:48

    Salve a tutti, ho questo problema che vi descrivo:

    col.A col.B Col.C Col.d
    5 H310 H318 H331
    3 H301 H311 H317 H318 H331 H341 H351 H372 H400
    Un foglio excel dove sono presenti in Col. A dei numeri che devono essere sommati, e delle altre colonne B e successive con delle sigle H315 etc....
    Ho sviluppato la macro indicata che dovrebbe sommare le sigle indicate in If condizionale. Devono essere ammesse le seguenti condizioni:
    1) i dati devo essere sommati solo se appartenenti a righe diverse.
    Es. consideriamo la prima riga; dato che le sigle soddisfano la condizione in quanto sono presenti H310 e H331 la macro mi somma 2 volte 5 fornendo come risultato 10. Il risultato dovrebbe essere pari a 5.
    2) il risultato finale che soddisfa le condizioni dovrebbe essere 8 in quanto il 5 della prima riga (sono presenti H310 e H331 che soddisfano la condizione), e 3 della seconda riga ( in quanto sono presenti H311,H331, H341). Spero di essermi spiegato, anche se il ragionamento è un po tortuoso

    grazie
     
    UR2 = Worksheets("Foglio2").Range("d" & Rows.Count).End(xlUp).Row
    
    'UC = Worksheets("Foglio2").Range("t2").End(xlToLeft).Column
    col = Range("A2").CurrentRegion.Columns.Count
    'Determinazione del valore soglia H300, H310, H330, H341, H311, H331>=0,1%
    For RR1 = 2 To UR2
    For RR2 = 5 To col
    Set y = Cells(RR1, RR2)
    If y = "H300" Or y = "H310" Or y = "H330" Or y = "H301" Or y = "H311" Or y = "H331" Then
    somma = Cells(RR1, 3) + somma
    End If
    Next
    Next
    



  • di Marius44 data: 11/09/2015 23:21:24

    Premesso che alcune indicazioni date sono incongruenti (in particolare la riga "For RR2 = 5 to col" mentre dovrebbe essere 2), con la mia versione di Excel2007 non mi legge la riga " UR2 = Worksheets("Foglio2").Range("d" & Rows.Count).End(xlUp).Row ", che ho provveduto a cambiare. Penso che l'errore sia nel non forzare l'uscita dal secondo ciclo una volta che ha trovato un dato.
    Prova la Sub postata sotto (adattandola alle tue esigenze); tieni presente che prima di End Sub ho messo uno Stop per poter leggere il risultato.

    Fammi sapere. Ciao,
    Mario
     
    Option Explicit
    
    Sub prova()
    Dim UR2 As Long, col As Long, RR1 As Integer, RR2 As Integer, somma As Double, y As Range
    'UR2 = Worksheets("Foglio2").Range("d" & Rows.Count).End(xlUp).Row
    UR2 = ActiveSheet.Cells(Rows.Count, 4).End(xlUp).Row
    'UC = Worksheets("Foglio2").Range("t2").End(xlToLeft).Column
    col = Range("A2").CurrentRegion.Columns.Count
    'Determinazione del valore soglia H300, H310, H330, H341, H311, H331>=0,1%
    For RR1 = 2 To UR2
        For RR2 = 2 To col
            Set y = Cells(RR1, RR2)
            If y = "H300" Or y = "H310" Or y = "H330" Or y = "H301" Or y = "H311" Or y = "H331" Then
                somma = somma + Cells(RR1, 1): Exit For
            End If
        Next
    Next
    Stop
    End Sub