contare celle per colore sfondo e testo
Hai un problema con Excel? 
contare celle per colore sfondo e testo
di Aghi (utente non iscritto) data: 11/09/2014 18:58:28
Buona sera ai grandi Guru del VBA.
Avrei ancora bisogno di Voi e del Vostro sapere.
Mi sono dato da fare a cercare qualcosa ma il massimo che ho trovato è questo.
un codice vba che risolve per metà il mio problema.
Mi servirebbe oltre che a “contare” le celle colorate mi servirebbe che mi conti differenziando anche il colore del testo, indipendentemente da ciò che è scritto (solo in aggiunta se possibile, anche il contenuto)
1. Trovare e contare le celle con lo stesso colore di sfondo e stesso colore del testo
2. trovare e contare le celle con lo stesso colore di fondo e stesso colore del testo e stesso contenuto scritto.
Allego file esempio sperando che si capisca .
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = WorksheetFunction.SUM(rCell, vResult)
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
vResult = 1 + vResult
End If
Next rCell
End If
ColorFunction = vResult
End Function |
di Luca73 data: 12/09/2014 09:56:03
Ciao Ho modificto la tua formula come segue Vedi Codice.
Ho introdotto un nuovo argomento booleano "StessoColorText" che se impostato a VEROcerca solo le celle con stesso colore di sfondo e stesso colore di testo. Se invece il Valore è falso o non messo la formula da' lo stesso risultato della tua precedente.
Per il colore del testo ho utilizzato la stessa filosofia del colore sfondo cioè di confronto con la cella selezionata.
Avendo usato la tua formula base on l'argomento SUM puoi sempre scegliere se contare o sommare
Nota: io non avrei usato la formula vResult = WorksheetFunction.SUM(rCell, vResult) bensì avrei usato 'vResult = vResult + rCell.value
Ciao
Luca
Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean, Optional StessoColorText As Boolean)
Dim rCell As Range
Dim lCol As Long
Dim textColor As Long
Dim vResult
lCol = rColor.Interior.ColorIndex
textColor = rColor.Font.Color
If SUM = True Then
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
If StessoColorText Then
If rCell.Font.Color = textColor Then
vResult = WorksheetFunction.SUM(rCell, vResult)
'vResult = vResult + rCell.value
End If
Else
vResult = WorksheetFunction.SUM(rCell, vResult)
'vResult = vResult + rCell.value
End If
End If
Next rCell
Else
For Each rCell In rRange
If rCell.Interior.ColorIndex = lCol Then
If StessoColorText Then
If rCell.Font.Color = textColor Then
vResult = 1 + vResult
End If
Else
vResult = 1 + vResult
End If
End If
Next rCell
End If
ColorFunction = vResult
End Function |
di Aghi (utente non iscritto) data: 12/09/2014 13:39:43
Mille Grazie Luca73
La formula non è farina del mio sacco, ma il risultato di ricerche in rete e mille macro trovate qui e li, provate se potevano andare per il mio bisogno e questa è la migliore che si avvicinava al mio caso,
non ho dimestichezza con VBA, ma ne so più di cinque mesi fa.
dovrei chiederti un altro favore, proprio perchè non sono pratico, mi fai comprendere le varianti di "vero e falso" dove le dovrei cambiare in caso lo desideri.
questo pomeriggio la proverò e Ti farò sapere.
Ancora infinite GRAZIE
di aaa (utente non iscritto) data: 12/09/2014 14:04:45
Specifica che sono celle di Formattazione condizionale
di Luca73 data: 12/09/2014 14:44:18
Ciao Aghi
attenzione se parliamo di formattazione condizionale il codice cambia. il codice come scritto vale per formattazione normale.
Riguardo a Vero e Falso mi immagino intendi le due variabile booleane da inserire nella formula.
La prima (SUM) che esisteva gia ti serve per decidere se vuoi sommare i valori (nel caso SUM= Vero o diverso da 0) oppure contarli (nel caso SUM= falso o uguale a 0)
La seconda (StessoColorText) l'ho aggiunta e ti serve per decidere se vuoi analizzare solo il colore di sfondo che esisteva gia ti serve per decidere se vuoi elaborare i valori in funzione del colore del testo (nel caso StessoColorText= Vero o diverso da 0) oppure indipendentemente dal colore del testo (nel caso StessoColorText= falso o uguale a 0)
Pertanto
= ColorFunction(A1; C1:C10; VERO; VERO) identico a scrivere ColorFunction(A1; C1:C10; 1; 1)
Ti somma le celle in C1:C10 aventi colore di sfondo e colore di testo uguali ad A1
= ColorFunction(A1; C1:C10; FALSO; VERO) identico a scrivere ColorFunction(A1; C1:C10; 0; 1)
Ti Conta le celle in C1:C10 aventi colore di sfondo e colore di testo uguali ad A1
= ColorFunction(A1; C1:C10; VERO; FALSO) identico a scrivere ColorFunction(A1; C1:C10; 1; 0)
Ti somma le celle in C1:C10 aventi colore di sfondo uguale ad A1
= ColorFunction(A1; C1:C10; FALSO; FALSO) identico a scrivere ColorFunction(A1; C1:C10; 0; 0)
Ti Conta le celle in C1:C10 aventi colore di sfondo uguale ad A1
Spero di aver chiarito il tuo dubbio ... a disposizione
Luca
di Aghi (utente non iscritto) data: 12/09/2014 20:34:19
veramente Infinite grazie.
Sono sincero, non mi è stato facile farla funzionare.
ci sono riuscito solo dopo aver letto i Tuoi chiarimenti.
Funziona a meraviglia,
MILLE Grazie.
Vuoi Approfondire?