| | Post: 31 | Registrato il: 30/06/2016
| Città: MILANO | Età: 48 | Utente Junior | 2013 | | OFFLINE | |
|
12/10/2017 10:52 | |
ciao a tutti,
avrei bisogno un supporto per creare una macro, per spiegarmi meglio allego un foglio xls con scritto un commento su cosa devo ottenere.
qualcuno può' darmi un supporto ?
Grazie
Claudio
|
|
| | Post: 441 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | ONLINE |
|
12/10/2017 15:37 | |
Ciao Claudio
senza macro ma con una colonna d'appoggio (che puoi nascondere) fai così:
in F2 metti = A2
in G2 metti =SE($B$2:$B$11="chiuso";MATR.SOMMA.PRODOTTO(($A$2:$A$11=F2)*$C$2:$C$11);"")
seleziona G2:F2 e tira giù fino alla riga 11
Nascondi la colonna F ed il gioco è fatto.
Se invece vuoi VBA, chiedi di nuovo.
Ciao,
Mario [Modificato da Marius44 12/10/2017 15:37] |
| | Post: 443 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | ONLINE |
|
12/10/2017 15:54 | |
Ciao
se proprio vuoi VBA ecco il codice
Sub Somma()
ur = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ur
If Cells(i, 2) = "chiuso" Then
nticket = Cells(i, 1).Value
For j = i To 2 Step -1
If Cells(j, 1) = nticket Then
mn = mn + Cells(j, 3).Value
Cells(i, 10) = mn '<== correggi il 10 col numero di colonna che vuoi
End If
Next j
mn = 0
End If
Next i
End Sub
Non ho dichiarato le variabili nè catturate eventuali errori. Pensaci tu.
Ciao,
Mario |
| | Post: 31 | Registrato il: 30/06/2016
| Città: MILANO | Età: 48 | Utente Junior | 2013 | | OFFLINE | |
|
13/10/2017 09:07 | |
grazie MILLE!!!!
mi piacciono entrambe le soluzioni
grazie Mario ho imparato una cosa nuova
Claudio |
| | Post: 32 | Registrato il: 30/06/2016
| Città: MILANO | Età: 48 | Utente Junior | 2013 | | OFFLINE | |
|
24/10/2017 14:08 | |
ciao
potresti darmi un supporto su una cosa che mi avevi già fatto, ma devo cambiare una regola e di conseguenza la formule/macro.
allego il foglio xls da cuoi si capisce cosa dovrei fare.
grazie
Claudio |
| | Post: 453 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | ONLINE |
|
24/10/2017 15:07 | |
Ciao
la macro è uguale alla precedente solo che devi farla iniziare dalla riga precedente. Eccola
Sub Somma()
ur = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ur
If Cells(i, 2) = "chiuso" Then
nticket = Cells(i, 1).Value
For j = i - 1 To 2 Step -1 'ho aggiunto il -1 dopo la i
If Cells(j, 1) = nticket Then
mn = mn + Cells(j, 3).Value
Cells(i, 10) = mn '<== correggi il 10 col numero di colonna che vuoi
End If
Next j
mn = 0
End If
Next i
End Sub
Come ho scritto basta aggiunge -1 nella riga For j = i
Ciao,
Mario |
| | Post: 33 | Registrato il: 30/06/2016
| Città: MILANO | Età: 48 | Utente Junior | 2013 | | OFFLINE | |
|
26/10/2017 15:13 | |
ciao Mario, sei sempre gentile e preciso.
però mi sono spiegato male, ti riallego il foglio xls,
se lo stato ="chiuso" somma solo i minuti del gruppo "sire_1" e basta.
quindi va fatto il controllo sia sullo stato che sul gruppo.
Claudio |
| | Post: 458 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | ONLINE |
|
26/10/2017 16:14 | |
Ciao
Sub Somma()
ur = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ur
If Cells(i, 2) = "chiuso" Then
nticket = Cells(i, 1).Value
For j = i To 2 Step -1 '<== codice modificato
If Cells(j, 1) = nticket And Cells(j, 3) = "SIRE_1" Then '<== aggiunta della nuova condizione
mn = mn + Cells(j, 6).Value
Cells(i, 10) = mn '<== correggi il 10 col numero di colonna che vuoi
End If
Next j
mn = 0
End If
Next i
End Sub
La macro è sempre la stessa ma con qualche modifica.
Ciao,
Mario |
| | Post: 34 | Registrato il: 30/06/2016
| Città: MILANO | Età: 48 | Utente Junior | 2013 | | OFFLINE | |
|
31/10/2017 10:30 | |
ciao allego il foglio xls con scritto all'interno la piccola modifica che mi servirebbe, ho provato a modificare il codice ma mi perdo in una stupidata.
|
| | Post: 461 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | ONLINE |
|
31/10/2017 14:49 | |
Ciao
La tua macro (a proposito, per una migliore condivisione, posta sempre il codice oltre, se proprio necessario, il file) è corretta tranne ...
una piccola sbavatura che ho provveduto a sistemare.
Indovina cosa ho cambiato. Ecco la macro corretta:
Sub sire1()
ur = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ur
If Cells(i, 2) = "chiuso" Then
nticket = Cells(i, 1).Value
For j = i To 2 Step -1
If Cells(j, 1) = nticket And Cells(j, 3) = "SIRE_1" Or Cells(j, 3) = "SIRE_2" Then
mn = mn + Cells(j, 4).Value
Cells(i, 7) = mn
End If
Next j
mn = 0
End If
Next i
End Sub
Mi sembra che così funziona.
Prova e fai sapere. Ciao,
Mario
|
| | Post: 35 | Registrato il: 30/06/2016
| Città: MILANO | Età: 48 | Utente Junior | 2013 | | OFFLINE | |
|
31/10/2017 15:11 | |
ciao , non somma correttamente.
provo a spiegarmi:
1)cancella tutti i valori nella colonna minuti.
2) valorizza solo la cella D2 e D3 metti i valori che vuoi ( DE appartiene al gruppo SIRE_1 e De al gruppo sire_2)
3) esegui la macro.
vedi che per gli altri n°tiket anche se non hai valorizzato i minuti, prendono il valore assegnato al gruppo SIRE_2 ( cioè D3)
Claudio
|
| | Post: 36 | Registrato il: 30/06/2016
| Città: MILANO | Età: 48 | Utente Junior | 2013 | | OFFLINE | |
|
31/10/2017 15:19 | |
Mario, ho risolto così:
ur = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ur
If Cells(i, 2) = "chiuso" Then
nticket = Cells(i, 1).Value
For j = i To 2 Step -1
If Cells(j, 1) = nticket And Cells(j, 3) = "SIRE_1" Then
mn = mn + Cells(j, 4).Value
Cells(i, 7) = mn
End If
If Cells(j, 1) = nticket And Cells(j, 3) = "SIRE_2" Then
mn = mn + Cells(j, 4).Value
Cells(i, 7) = mn
End If
Next j
mn = 0
End If
Next i |
| | Post: 462 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | ONLINE |
|
31/10/2017 16:04 | |
Ciao
Nella fretta avevo ricopiato la tua macro.
Quella corretta è questa
Sub Marius44()
ur = Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To ur
If Cells(i, 2) = "chiuso" Then
nticket = Cells(i, 1).Value
For j = i To 2 Step -1
If Cells(j, 1) = nticket And (Cells(j, 3) = "SIRE_1" Or Cells(j, 3) = "SIRE_2") Then
mn = mn + Cells(j, 4).Value
Cells(i, 7) = mn
End If
Next j
mn = 0
End If
Next i
End Sub
Come potrai notare le due condizioni SIRE_1 e SIRE_2 devono stare entro le parentesi.
Prova e fai sapere. Ciao,
Mario |
|
|