Somme Multiple

Storico discussioni

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 .

Cognolato Studio © 2005