roccofre ha scritto:a me serve sapere se in 5 celle vicine della stessa riga almeno 2 siano dello stesso colore
In modo non didattico:
1) inserisci questa “macro”
- Codice: Seleziona tutto
Function CCC(SCells As Range, TCell As Range) 'Count Cell Color
'SCells e' l' area di celle contigue di cui si vuol verificare il colore
'TCell e' la cella di paragone
'USO: =CCC(SCells;TCell)
'esempio di formula: =CCC(A1:E1,$F$1)
'
Application.Volatile
TColor = TCell.Interior.ColorIndex
For Each Cella In SCells
If Cella.Interior.ColorIndex = TColor Then CCC = CCC + 1
Next Cella
End Function
2) applichi a una cella libera, es Z1, il colore che vuoi confrontare
3) adiacente alla tua prima riga di dati, in una colonna libera, es in H2, inserisci la formula =CCC(C2:G2;$Z$1)
Avrai cosi’ in H2 il numero di celle del range C2:G2 che hanno lo stesso colore di Z1; se le celle che vuoi controllare non sono C:G modifica la formula di conseguenza.
4) copia la formula di H2 verso il basso per tutte le righe che ti servono.
quindi tenere alla fine buone solo quelle righe che hanno 2 o piu celle con il colore da me specificato
5) Per questo puoi applicare il filtro automatico alla colonna H e filtrare a secondo di cosa devi fare; ad esempio filtri con “2”, oppure (modalita’ Personalizza) “maggiore o uguale a” 2, oppure “minore di” 2, o altre a scelta tra le opzioni disponibili.
Ti avviso che la macro intercetta i colori definiti dalla formattazione di cella, non dalla formattazione condizionale; quest’ ultima e’ intercettabile solo con complicazioni non da poco; almeno fino a excel 2003, per 2007 non so.
Come pure e' utile ricordare che la funzione ricalcola i risultati dopo ogni "modifica" dei dati, ma in excel applicare un colore non e' una "modifica"; se hai dei dubbi, premi F9 per forzare un ricalcolo.
In modo piu’ didattico:
-quella che ti ho proposto tecnicamente non e’ una “macro” ma una “funzione utente”; quindi puo’ essere usata direttamente nella formula (per contro le funzioni devono rispettare vincoli un po’ piu’ stringenti delle macro)
-rispetto alla tua “If Cells(a, b).Interior.Color = RGB(55, 195, 255)” io ho calcolato prima il colore della cella di paragone (TColor=TCell.Interior.ColorIndex) e poi uso quella variabile (TColor) nel confronto; in questo modo mi basta assegnare il colore alla cella target (ad esempio Z1) senza dover scrivere le componenti RGB nel codice vba
-ho usato la proprieta’ ColorIndex (restituisce il numero del colore all’ interno della tavolozza di colori attiva) invece che Color (restituisce il valore delle componenti RGB); ma in questo caso il risultato e' simile.
-ho usato le istruzioni For each /Next per ripetere le operazioni sui componenti elementari (le celle) del range dichiarato
-di conseguenza la “funzione” CCC (che vorrebbe significare Count Cell Color) restituisce quante volte il colore di una cella del range dichiarato ha lo stesso colore della cella di confronto dichiarata.
Spero che aiuti…
Ciao.