Macro di formattazione condizionale



  • Macro di formattazione condizionale
    di Attilio data: 09/12/2012 17:57:47

    Ciao, mi servirebbe in VBA una macro automatica nel foglio mi colori di rosso le celle e di bianco bold il numero, in pratica la macro deve colorare tutte le celle in colonna A:A di cui anno in comune consecutivamente lo stesso numero. Es. 2 - 3 - 7 - 12 - 25 - 10 - 68 - 68 - 32 - 7 - 7, in questo caso dovrebbe colorare in rosso le celle che hanno il numero 68 e 7 essendo cinsecutivi, ringrazio gentilmente a chi mi aiuta



  • di Vecchio Frac data: 09/12/2012 18:24:57

    Bè il titolo del post è fuorviante rispetto al quesito :)
    Comunque hai già ipotizzato un algoritmo, adesso devi tradurlo.
    Parti con un ciclo dalla prima cella del range, esamina la cella, se il valore è uguale a quello precedente allora colora entrambe di rosso altrimenti prosegui.

    - imposta "cella_precedente" su vuoto
    - parte il ciclo
    - leggi prossima cella
    - se cella = cella_precedente: formatta cella_precedente e cella sui colori desiderati (interior.color rosso e font.color bianco)
    - altrimenti: poni cella_precedente = cella
    - prosegui col ciclo da leggi prossima cella

    Questo algoritmo colora di rosso tutti i numeri consecutivi che trova, fossero anche tre o quattro, finchè non ne trova uno diverso.





  • di Attilio data: 10/12/2012 11:46:51

    Ciao Vecchio Frac, ti ringrazio per la risposta rapida, ma il mio problema è che con VBA sono quasi a zero, quindi non saprei proprio come attuare il cerca.vert in vba, potresti esprimere meglio la tua risposta?



  • di Vecchio Frac data: 10/12/2012 12:59:52

    Allora in alternativa al codice ti propongo una soluzione con la formattazione condizionale, che magari era proprio quello che volevi e che forse ti risulta più facile da implementare ^_^

    se i dati cominciano in A1, nella prima cella che contiene i dati (i numeri) da confrontare, inserisci questa formula di formattazione condizionale:
    =E(A1=A2;A1<>"") e imposta colore carattere bianco, colore motivo Rosso
    (se la prima cella con i dati è poniamo A5, la formula deve cambiare in: =E(A5=A6;A5<>"")

    nelle celle successive (per tutte le celle successive alla prima) in giù, fino al termine della colonna di dati, imposta questa formattazione condizionale:
    =E(O(A2=A1;A2=A3);E(A1<>"";A2<>"")) e imposta sempre colore carattere bianco, colore motivo Rosso
    (anche qui se la prima cella con dati non è A1, modifica di conseguenza la formula per far sì che si confronti il dato attuale col precedente e il successivo)
    Per copiare questa formattazione condizionale, ti basta scriverla una volta nella seconda cella del range e poi estendere un copia formato dalla seconda cella in giù.

    Adesso, dinamicamente, se scrivi due o più numeri consecutivi uguali, questi si colorano di rosso.
    Appena ho tempo (o se si fa avanti qualcun altro) e se ti interessa vediamo invece la soluzione con VBA.





  • di Attilio (utente non iscritto) data: 10/12/2012 18:23:22

    Ti ringrazio per la tua pazienza, e quando hai tempo èer ol vba aspetto, grazie ancora



  • di Vecchio Frac data: 10/12/2012 20:55:03

    Ecco il pezzullo di codice.
    I dati consecutivi si trovano in colonna A; alla prima riga vuota la procedura si ferma.
     
    Option Explicit
    
    Sub evidenzia_consecutivi()
    Dim cella As Range, cella_precedente As Range
    
        Set cella_precedente = Nothing
        For Each cella In [A:A]
            If cella = "" Then Exit Sub
            
            If Not cella_precedente Is Nothing Then
                If cella = cella_precedente And cella.Interior.Color <> vbRed Then
                    cella_precedente.Interior.Color = vbRed
                    cella_precedente.Font.Color = vbWhite
                    cella.Interior.Color = vbRed
                    cella.Font.Color = vbWhite
                End If
            End If
            Set cella_precedente = cella
        Next
                
    End Sub






  • di Attilio (utente non iscritto) data: 11/12/2012 14:44:47

    Sei stato gentilissimo, mi vergogno quasi a ringraziarti, meriteresti molto di più di un grazie, a presto



  • di Vecchio Frac data: 11/12/2012 16:03:15

    cit. " mi vergogno quasi a ringraziarti"
    ---> ma che sciocchezza :)

    cit. " meriteresti molto di più di un grazie "
    ---> un bacio? incarico mia moglie a darmelo al posto tuo ^_^

    Non hai però detto se le soluzioni proposte funzionano nè se era quello che volevi (magari non volevi evidenziare più di due numeri consecutivi oppure volevi evidenziare solo gli ultimi due, oppure ancora tutti quelli ripetuti tranne il primo della serie, ecc.).





  • di Attilio data: 12/12/2012 10:37:50

    Immaginavo che avresti potuto immaginare la cosa in un bacio, ma mi dispiace per te non è il bacio e nessun contatto fisico....ahahahhahah......magari ad un dono di Natale, questo forse si, cmq a parte gli scherzi, funziona alla perfezione, grazie ancora e se non dovessimo sentirci, ti auguro uno splendido Natale ed un felice anno nuovo (se non finisce il MONDO!!!) a te e la tua famiglia, ciao