claudio-ExcelForum
00giovedì 16 giugno 2016 12:45
buongiorno a tutti
non riesco a trovare la logica che mi consenta di fare quanto segue
supponiamo io abbia un'elenco di lettere su una colonna a sinistra e dei valori associati su una colonna a destra.
ogni lettera conserva sempre lo stesso valore
ho una macro con un ciclo for che scorre ogni riga di questo elenco e se trova certe condizioni fa delle cose.
se io volessi cercare la somma di "a" che vale sempre 2 con "b" che vale sempre 6 la macro mi restituisse 8 anche se nell'elenco a e b compaiono più volte.
son sicuro che qualcuno saprà aiutarmi
grazie 1000
patel45
00giovedì 16 giugno 2016 12:54
1) hai allegato un xlsx e quindi senza la macro, per allegare un xlsm devi zipparlo.
2) Puoi spiegare meglio cosa vuoi ottenere ? non ho capito bene.
magari mostra anche il risultato desiderato
federico460
00giovedì 16 giugno 2016 13:01
Ciao
non vedo macro ma in qualsiasi caso
non capisco cosa intendi ( è l'età
)
passo la colonna se trovo sia a che b rispondo 8 ?
o sommo il valore di a con il valore di 8
ciao Patel
tempistica eh!
claudio-ExcelForum
00giovedì 16 giugno 2016 15:29
scusatemi avete ragione ho caricato il nuovo file dentro ho spiegato meglio
grazieeee
claudio-ExcelForum
00giovedì 16 giugno 2016 15:41
riuscite a vedere il file? non capisco se lo ha caricato
alfrimpa
00giovedì 16 giugno 2016 15:43
No il file non c'è
Se ci sono macro devi zipparlo.
claudio-ExcelForum
00giovedì 16 giugno 2016 15:50
grazie
allora questo è l'esempio
grazie di nuovo
patel45
00giovedì 16 giugno 2016 15:55
avevo chiesto il risultato desiderato
alfrimpa
00giovedì 16 giugno 2016 15:57
Re:
patel45, 16/06/2016 15.55:
avevo chiesto il risultato desiderato
Infatti.
Nella cella K13 qual è, in base all'esempio, il valore che ti aspetti? 21?
patel45
00giovedì 16 giugno 2016 16:16
forse ho capito
Sub cerca2()
tipo = "rotto"
lotto = 4332
anno = 2016
ur = Cells(Rows.Count, "c").End(xlUp).Row
For i = 2 To ur
If lotto = Range("c" & i & "") And anno = Range("b" & i & "") Then
sommalanciati = sommalanciati + Range("D" & i)
End If
If lotto = Range("c" & i & "") And tipo = Range("f" & i & "") And anno = Range("b" & i & "") Then
sommascarti = sommascarti + Range("E" & i)
End If
Next
Range("k13") = sommascarti
Range("K14") = sommalanciati
End Sub
claudio-ExcelForum
00giovedì 16 giugno 2016 18:31
mi spiego meglio:
Devo fare la percentuale annua dei pezzi scarto quindi mi serve:
1. la somma dei pezzi scarto per un dato motivo, rilevati in un certo anno, e l'ho trovata!
2. il numero di pezzi prodotti nello stesso anno
NOTA. Quando compilo il database degli scarti metto il numero di pezzi scartati e il numero di pezzi di cui è composto il lotto. In produzione non vengono lanciati mai 2 lotti con lo stesso numero lotto, quindi il fatto che ricompaiano nel database lotti con lo stesso numero significa che son stati rilevati scarti in momenti diversi ma al fine della determinazione dei pezzi lanciati l'anno, se trovo 2 volte lo stesso lotto i suoi pezzi li devo contare una sola volta.
2016 4332 20 1 rotto
2015 4332 20 2 rotto
2016 4551 4 3 snervato
2016 4337 5 4 snervato
2016 4661 7 5 rotto
2015 4332 20 6 rotto
2015 4661 7 7 snervato
2015 4678 6 1 rotto
2015 4551 4 0 rotto
2015 4551 4 1 snervato
2016 4332 20 1 rotto
2016 4332 20 1 rotto
2016 4332 20 1 snervato
2016 4678 6 1 snervato
quindi se volessi fare la somma dei pezzi lanciati nel 2016 sarebbero: 20 (del lotto 4332 che conto una sola volta) + 4 + 5 + 7 + 6 i cui lotti compaiono in questo caso compaiono una sola volta nel 2016 totale = 42
scusate se mi sono dilungato
grazieeeeeeeeee
patel45
00venerdì 17 giugno 2016 09:13
a questo punto non ci ho capito niente
dodo47
00venerdì 17 giugno 2016 09:37
Ciao
da quello che dici (che capisco) il tipo di difetto è ininfluente.
Prova
Sub cerca()
Dim mColl As New Collection, mKey As String
ur = Cells(Rows.Count, "c").End(xlUp).Row
sommalanciati = 0
mAnno = 2016
mKey = ""
For i = 2 To ur
If Cells(i, 2) = mAnno Then
mKey = Cells(i, 2) & Cells(i, 3) & Cells(i, 4)
On Error Resume Next
mColl.Add mKey, mKey
If Err.Number = 0 Then
sommalanciati = sommalanciati + Cells(i, 4)
End If
End If
On Error GoTo 0 '<<<<<<<<<<<< EDIT >>>>>>>>>>>
Next i
MsgBox sommalanciati
End Sub
saluti
claudio-ExcelForum
00venerdì 17 giugno 2016 10:46
grande!!!!!! perfetto funziona!!
ti chiederei una ultima cortesia...
io la dovrei adattare questa macro al vero file ma non riesco a capire esattamente come raggiunge il risultato.
mi potresti descrivere cosa fa?
non capisco mkey e mcall.add
grazieeee davvero grazie
patel45
00venerdì 17 giugno 2016 11:05
per capire ti devi studiare le collection che servono per eliminare i duplicati
dodo47
00venerdì 17 giugno 2016 11:07
Ciao
la macro utilizza una collection nella quale non sono ammessi valori duplicati. Il valore che viene immesso nella collection è composto da:
lotto -> cells(i,2)
pezzi lanciati -> cells(i,3)
tipo difetto -> cells(i,4)
quindi mKey = Cells(i, 2) & Cells(i, 3) & Cells(i, 4)
(per esempio riga 2, mKey sarà 433220rotto)
quando in riga 15 si ritrova ad immettere la stessa chiave, la collection la rifiuta perché già esistente.
Nel momento invece che la collection non da errore (If Err.Number = 0 Then) allora alimenta la somma.
E' un po' contorto ma tant'è
saluti
claudio-ExcelForum
00venerdì 17 giugno 2016 11:09
la trovo geniale come trovata!!!! io mi sono spremuto le meningi u2 settimane senza cavarne niente
grazie 1000