contare celle per colore sfondo e testo



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