Somme multiple

  • SOMME MULTIPLE di ENZO
    For H = 1 To Range("C1").Value
    If Range("E" & H).Text = "ENZO" Then
    Range("D1").Select
    ActiveCell.Value = Range("F" & H).Value + Range("G" & H).Value
    End If
    Next H
    End Sub
    Nell'istruzione sopra decritta ho una macro che cerca all'interno di un elenco (premesso che i nominativi
    sono nella colonna e ed il quantitativo di numero di colonne e' nella cella c1)
    un nome - in questo caso enzo - e nella colonne f e g ho dei valori corrispondenti ai nominativi
    il problema sorge in quanto la macro scorre nell'elenco e cerca di trovare enzo
    quando lo trova indica nella cella d1 la somma dei valori che trova nella colonna f e la colonna g
    come posso fare afficnhe se nell'elenco ci sia presente lo stesso nominativo piu' volte nella colonna d mi indichi il valore complessivo delle colonne f e g di tutti i nominativi "enzo" trovati?
    spero di essere stato chiaro
    grazie

    di enzo
    descrizione piu' semplice
    colonna a1 ho enzo
    nella colonna da b1 a b8 ho dei nominativi con vicino nella colonna c e d dei quantitativi
    ora quello che chiedevo e'
    la macro controlla da b1 a b8 quanti enzo ci sono e nella colonna es. c1 mi indica la somma dei valori di enzo trovati corrispondenti alle colonne b e c
    ora spero di essere stao un po' piu' chiaro

    di francesca
    anche io come enzo ho un problema simile
    dato un elenco con un insieme di nominativi ricercandone uno (presente piu' volte nell'elenco) riesco ad ottenere il valore inserito nella cella adiacente ma solo l'ultimo trovato della routine
    a me servirebbe che ogni volta che il nominativo viene trovato i valori nelle celle adiacenti (riferite sempre a quel nominativo) si sommassero dando vita ad un unico totale
    qualcuno mi puo' aiutare?

    di Apoben64
    Ciao , rispondo a franesca, se ti interessa conoscere meglio la funzione SOMMA SE in VBA, per brevità di tempo , visiona questo link :
    http://www.ennius.altervista.org/mike/procedure/mikevba032.htm

    di francesca
    ti ringrazio ma volevo un aiuto utilizzando una routine senza dover utilizzare le funzioni direttamente nel foglio excel
    l'esempio che ha fatto enzo e' molto simile al mio
    una macro vede in a1 un nominativo
    cerca il nominativo e lo trova nella colonna b
    piu' volte e somma i valori corrispondenti nelle celle adiacenti sempre relative al quel nominativo in un altra cella
    mi auguro di essere stata chiara
    grazie

    di enzo
    RINGRAZIO FRANCESCA DI ESSERE INTERVENUTA MA GRADIREI SE QUALCUNO POTESSE DARMI UN AIUTO AL MIO QUESITO
    IN EFFETTI IL MIO E' MOLTO SIMILE AL SUO
    GRAZIE

    di Apoben64
    Scusate ENZO e Francesca, penso che comunque non possiate fare a meno della funzione SOMMA.SE che in VBA , si esprime , ma è solo un suggerimento :

    ActiveCell = WorksheetFunction.SumIf([colonna ] , " il valore che cerchi ", [Colonna])

    di Apoben64
    Aggiungo anche questo codice , che mi permette di avere sulla base di un elenco nel Foglio1 (colonna A nominativo - colonna B valore), nel foglio 2 la somma dei valori per nominativo. Spero vi sia utile per trovare la vostra soluzione !. Mi spiace ma è un pò lungo .
    Sub somma()
    Dim SourceRange As Range, TargetRange As Range
    Dim SourceCollection As New Collection
    Dim CellFound As Range, FirstAddress As String
    Dim TotalAmount As Currency
    Dim i, j As Long


    Set SourceRange = [Foglio1!A1:A200]

    Set TargetRange = [Foglio2!A1:A200]
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    If Not IsEmpty(SourceRange.Offset(1, 0)) Then
    Set SourceRange = SourceRange.Resize(SourceRange. _
    End(xlDown).Row - SourceRange.Row + 1)
    End If


    For Each i In SourceRange
    On Error GoTo ErrHandler
    SourceCollection.Add i, CStr(i)
    On Error GoTo 0
    GoSub SumAndWrite
    Continue:
    Next


    Exit_Sub:
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Exit Sub


    SumAndWrite:
    With SourceRange
    Set CellFound = .Find(What:=i, _
    After:=SourceRange(SourceRange.Count), _
    MatchCase:=True, _
    SearchOrder:=xlByColumns, _
    SearchDirection:=xlNext, _
    lookat:=xlWhole, _
    LookIn:=xlValues)
    If Not CellFound Is Nothing Then
    FirstAddress = CellFound.Address
    Do
    TotalAmount = TotalAmount + CellFound(1, 2)
    Set CellFound = .FindNext(CellFound)
    Loop While CellFound.Address <> FirstAddress
    End If
    End With
    j = j + 1
    TargetRange(j, 1) = i
    TargetRange(j, 2) = TotalAmount
    TotalAmount = 0
    Return


    ErrHandler:
    On Error GoTo 0
    Resume Continue:


    End Sub



    di enzo
    DIRE CHE SEI STATO GRANDE E' POCO
    E' PROPRIO QUELO CHE MI SERVIVA
    POTREI CHIEDERTI UNA COSA?
    NEL TUO ESEMPIO C'E' LA COLONNA A CON I NOMINATIVI E LA COLONNA B CON GLI IMPORTI E QUESTI VENGONO RIEPILOGATI NEL FOGLIO 2
    MA SE VOLESSI AGGIUNGERE ALTRE COLONNE DI IMPORTI
    OSSIA FOGLIO1 COLONNA A = NOMINATIVI
    COLONNA B = IMPORTI
    COLONNA C= IMPORTI ETC
    E RIEPILOGARE POI TUTTO NEL FOGLIO 2 COSI' COME L'HAI IMPOSTATO DOVE DEVO INTERVENIRE?
    YOU ARE GREAT

    PER LUCA - SEMPRE A PROPOSITO DI SOMME MULTIPLE di ENZO
    SCUCA LUCA SE TI ROMPO LE SCATOLE MA APROPOSITO DI QUEL CODICE CHE AVEVI SVILUPPATO PER QUEL PROBLEMA RIGUARDANTE LE SOMME MULTIPLE TI VORREI CHIEDERE UNA COSA
    COME MAI DOPO IL CODICE MI ESEGUE TUTTO ALLA PERFEZIONE MA SE ALLA FINE CONTINUO CON ALTRE ISTRUZIONI LUI NON LE CONSIDERA.
    SEMBRA CHE FINISCA LI E NON VADA AVANTI.
    SCUSA PER LA ROTTURA DI SCATOLE

    di Apoben64
    Ciao Enzo, per nulla rompi le scatole, peraltro, oggi è una giornataccia e mi proprononevo di affrontare le tue richieste nel pomeriggio, appuntamenti permettendo.
    Scusami !

    di ENZO
    NO PROBLEM ANZI TI RINGRAZIO

    di Apoben64
    Ciao Enzo, purtroppo mi sono incasinato con le mie stesse mani, scusa l'espressione , e non riesco a venirne fuori. La macro è in un certo senso è blindata ed è vero che così non può inteargire con altre istruzioni.Le prove che ho fatto per ampliare la zona da sommare non ha dato risultati .
    Una soluzione un pò più faraginosa è quello di creare singole macro sfruttando ad esempio questo tipo di istruzione :
    Sub SOMMA()
    Worksheets(1).Select
    Dim Cel As Object
    Set Zona = Range([a1], [a1].End(xlDown))
    tot = 0
    For Each Cel In Zona
    If Cel = "A" Then ' Il tuo valore
    tot = tot + Cel.Offset(0, 1).Value
    End If
    Next
    Worksheets(2).Select
    [a1].End(xlDown).Select
    ActiveCell.Offset(1, 0) = tot
    End Sub

    Ovviamente basterà cambiare i valori e il conseguente cel.offset nelle altre macro e intestare nel Foglio 2 le colonne col nome del valore .Sono certo che tu sei all'altezza di apportare le necessarie modifiche.

    Un saluto Luca .