Contare celle tramite colore di sfondo da formattazione condizionale.

Anonimo
2020-04-05T21:21:44+00:00

Ciao,

tramite questa funzione riesco a contare le celle che hanno un determinato colore di sfondo:

Function ContaCellePerColore(rData As Range, cellRefColor As Range) As Long

    Dim indRefColor As Long

    Dim cellaCorrente As Range

    Dim cntRes As Long

    Application.Volatile

    cntRes = 0

    indRefColor = cellRefColor.Cells(1, 1).Interior.Color

    For Each cellaCorrente In rData

        If indRefColor = cellaCorrente.Interior.Color Then

            cntRes = cntRes + 1

        End If

    Next cellaCorrente

    ContaCellePerColore = cntRes

End Function

che richiamo nel seguente modo:

=ContaCellePerColore (Intervallo di celle;cella con cui confrontare il colore di sfondo )

ad esempio:

=ContaCellePerColore($B1:$B10;$A$1)

Il problema nasce però nel momento in cui il colore di sfondo dell'intervallo di celle B1 : B10 è determinato dalla formattazione condizionale: il conteggio delle celle resta a zero.

Come si può modificare il codice affinché riconosca il colore di sfondo avuto tramite la formattazione condizionale?

Vladimiro

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2020-04-07T14:56:00+00:00

Ciao Vladimiro,

questa volta non riusciamo a capirci.

:-)

L' intervallo d'interesse è M3 : N8 e non A3 : A8

L'ho so ma il colore del formato condizionale dell'intervallo M3:M8 dipende dal valore delle celle A3:A8.

Da Excel 2010 in poi è possibile sfruttare la proprietà DisplayFormat.Interior.Color di un intervallo per contare il numero di celle colorate,  come dimostrato nel seguente codice:

'=========>>

Option Explicit

'--------->>

Public Sub Tester()

    Dim Res As Long

    With ThisWorkbook.Sheets("Sheet1")

        Res = CountColorCells(.Range("M3:M8"), .Range("A1"))

    End With

    MsgBox Res

End Sub

'--------->>

Public Function CountColorCells( _

              RngDaContare As Range, _

              RngColore As Range)

    Dim rCell As Range

    Dim iCtr As Long

    For Each rCell In RngDaContare.Cells

        If rCell.DisplayFormat.Interior.Color = _

                            RngColore.Interior.Color Then

            iCtr = iCtr + 1

        End If

    Next

    CountColorCells = iCtr

End Function

'<<=========

Potresti scaricare il mio file di prova Vladimiro20200407.xlsm

Sfortunatamente, tuttavia, va notato che la proprietà DisplayFormat.Interior.Color

non può essere utilizzata in una funzione chiamata da un foglio di lavoro, ossia una UDF (funzione utente).

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2020-04-07T17:03:43+00:00

    Ciao Norman,

    Da Excel 2010 in poi è possibile sfruttare la proprietà DisplayFormat.Interior.Color di un intervallo per contare il numero di celle colorate,  come dimostrato nel seguente codice:

    Ok,  va bene:

    Questa tua spiegazione non l'ho capita:

    Sfortunatamente, tuttavia, va notato che la proprietà DisplayFormat.Interior.Color

    non può essere utilizzata in una funzione chiamata da un foglio di lavoro, ossia una UDF (funzione utente).

    Vladimiro

    La risposta è stata utile?

    1 persona ha trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2020-04-06T18:00:38+00:00

    Ciao Vladimiro,

    come avrai sicuramente capito, il tutto gira intorno ad un unico progetto sempre in fase di espansione.

    Dunque, all'interno dell'intervallo M3 : M8 inserisco manualmente i valori corrispondenti a quelli che si trovano nell'intervallo di celle O2 : Q2:

    formattati in questo modo:

    Con riferimento alla seguente immagine, per contare le celle dei tre colori nel intervallo M3:M8, nella cella P10, immetti la formula

                   =MATR.SOMMA.PRODOTTO(--(M3:N8=O2))

    Nella cella P11, immetti la formula

                   =MATR.SOMMA.PRODOTTO(--(M3:N8=P2))

    Nella cella P11, immetti la formula

                   =MATR.SOMMA.PRODOTTO(--(M3:N8=Q2))

    Potresti scaricare il mio file di prova Vladimiro20200406.xlsm

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2020-04-06T07:16:03+00:00

    Ciao Vladimiro,

    tramite questa funzione riesco a contare le celle che hanno un determinato colore di sfondo:

    Function ContaCellePerColore(rData As Range, cellRefColor As Range) As Long

        Dim indRefColor As Long

        Dim cellaCorrente As Range

        Dim cntRes As Long

        Application.Volatile

        cntRes = 0

        indRefColor = cellRefColor.Cells(1, 1).Interior.Color

        For Each cellaCorrente In rData

            If indRefColor = cellaCorrente.Interior.Color Then

                cntRes = cntRes + 1

            End If

        Next cellaCorrente

        ContaCellePerColore = cntRes

    End Function

    che richiamo nel seguente modo:

    =ContaCellePerColore (Intervallo di celle;cella con cui confrontare il colore di sfondo )

    ad esempio:

    =ContaCellePerColore($B1:$B10;$A$1)

    Il problema nasce però nel momento in cui il colore di sfondo dell'intervallo di celle B1 : B10 è determinato dalla formattazione condizionale: il conteggio delle celle resta a zero.

    Come si può modificare il codice affinché riconosca il colore di sfondo avuto tramite la formattazione condizionale?

    Contare il numero di celle il cui colore di sfondo è imposto dalla formattazione non è affatto banale: il modo più semplice sarebbe contare le celle usando la stessa condizione utilizzata dalla formattazione condizionale.

    Quindi, per aiutarti ulteriormente, vorrei sapere la formula utilizzata dalla formattazione condizionale per impostare il colore di interesse.

    ===

    Regards,

    Norman

    Ciao Norman,

    come avrai sicuramente capito, il tutto gira intorno ad un unico progetto sempre in fase di espansione.

    Dunque, all'interno dell'intervallo M3 : M8 inserisco manualmente i valori corrispondenti a quelli che si trovano nell'intervallo di celle O2 : Q2:

    formattati in questo modo:

    Vladimiro

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2020-04-06T01:42:59+00:00

    Ciao Vladimiro,

    tramite questa funzione riesco a contare le celle che hanno un determinato colore di sfondo:

    Function ContaCellePerColore(rData As Range, cellRefColor As Range) As Long

        Dim indRefColor As Long

        Dim cellaCorrente As Range

        Dim cntRes As Long

        Application.Volatile

        cntRes = 0

        indRefColor = cellRefColor.Cells(1, 1).Interior.Color

        For Each cellaCorrente In rData

            If indRefColor = cellaCorrente.Interior.Color Then

                cntRes = cntRes + 1

            End If

        Next cellaCorrente

        ContaCellePerColore = cntRes

    End Function

    che richiamo nel seguente modo:

    =ContaCellePerColore (Intervallo di celle;cella con cui confrontare il colore di sfondo )

    ad esempio:

    =ContaCellePerColore($B1:$B10;$A$1)

    Il problema nasce però nel momento in cui il colore di sfondo dell'intervallo di celle B1 : B10 è determinato dalla formattazione condizionale: il conteggio delle celle resta a zero.

    Come si può modificare il codice affinché riconosca il colore di sfondo avuto tramite la formattazione condizionale?

    Contare il numero di celle il cui colore di sfondo è imposto dalla formattazione non è affatto banale: il modo più semplice sarebbe contare le celle usando la stessa condizione utilizzata dalla formattazione condizionale.

    Quindi, per aiutarti ulteriormente, vorrei sapere la formula utilizzata dalla formattazione condizionale per impostare il colore di interesse.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento