| 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 . |