Condividi:        

Formattazione condizionale

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Formattazione condizionale

Postdi fantina » 02/05/14 16:45

Ciao a tutti... ho provato a cercare sul forum dato che penso sia una richiesta semplice ma non ho trovato nulla... Vorrei applicare una formattazione condizionale ad una parola del testo e non a tutta la cella: è possibile? Cioè vorrei che tutte le volte che scrivo Rimpatriato questa venga in grassetto rosso, cosiccome Dimesso dovrebbe venire in grassetto blu... ecc ecc.... sono parole che si trovano all'interno di lunghi testi e vorrei rimanessero in evidenza
Grazie!! :)
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Sponsor
 

Re: Formattazione condizionale

Postdi ricky53 » 02/05/14 17:10

Ciao,
con la formattazione condizionale, a mia conoscenza, non si può fare.

Invece con del codice in VBA, che viene attivato al cambiamento del contenuto della cella attiva,
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
' QUI va scritto il codice
End Sub
è fattibile.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Formattazione condizionale

Postdi ricky53 » 02/05/14 17:52

Ciao,
ecco un esempio
Codice: Seleziona tutto
Option Explicit
Option Compare Text

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer, Val1 As String, Val2 As String
   
    If Intersect(Target, Range("B2:B10")) Is Nothing Then ' <<===== qui scrivi iltuo intervallo
        Exit Sub
    End If
    Val1 = Range("C1") ' <<==== qui c'è la prima parola
    Val2 = Range("D1") ' <<==== qui c'è la seconda parola
   
    With Target.Characters(Start:=1, Length:=Len(Target)).Font
        .FontStyle = "Normale"
        .ColorIndex = xlAutomatic
    End With
   
    For I = 1 To Len(Target)
        If Mid(Target, I, Len(Val1)) = Val1 Then
            With Target.Characters(Start:=I, Length:=Len(Val1)).Font
                .FontStyle = "Grassetto"
                .ColorIndex = 3
            End With
        End If

        If Mid(Target, I, Len(Val2)) = Val2 Then
            With Target.Characters(Start:=I, Length:=Len(Val2)).Font
                .FontStyle = "Grassetto"
                .ColorIndex = 5
            End With
            Exit For
        End If
    Next I
End Sub


il codice va copiato nel foglio sul quale vuoi fare l'operazione di colorare parte di testo
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Formattazione condizionale

Postdi fantina » 02/05/14 19:09

Grazie ricky! Direi che funziona benissimo! Quindi devo tenere in chiave (nel tuo esempio C1 e D1) le parole che voglio evidenziare, giusto? Perfetto... Grazie mille e buon weekend!! :) :)
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Formattazione condizionale

Postdi Anthony47 » 03/05/14 19:47

Una versione appena piu' ingegnerizzata di quanto proposto da Ricky potrebbe essere questa macro:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim myArea As String, myWords, myBold, myColors, myUnderl, mySize, myTarget
Dim myF, I As Long
'
myArea = "B1:B100"      '<<< L' area in cui sara' effettuata la ricerca
'
If Application.Intersect(Target, Range(myArea)) Is Nothing Then Exit Sub
If Target.Count <> 1 Then Exit Sub
If IsError(Target.Value) Then Exit Sub
'
myTarget = Replace(Replace(Replace(Target.Value, ",", " "), ".", " "), "?", " ") & " "
Application.EnableEvents = False
'il mio dizionario di Parole, Grassetto, Sottolineato, Colore
myWords = Array("Rimpatriato", "Dimesso", "terza")
myBold = Array(1, 0, 1)     '1=Si, 0=No
myUnderl = Array(0, 1, 0)   'idem
mySize = Array(0, 14, 0)    '0=default, >0=imposta
myColors = Array(RGB(255, 0, 0), RGB(0, 255, 0), RGB(255, 255, 0))
'
'Ripristina formati:
Target.Font.FontStyle = "Normale"               '<*
Target.Font.ColorIndex = xlAutomatic            '<*
Target.Font.Underline = xlUnderlineStyleNone    '<*
Target.Font.Size = Application.StandardFontSize '<*
'
'Ricerca e modifica:
For I = LBound(myWords, 1) To UBound(myWords, 1)
    myF = InStr(1, myTarget, (myWords(I) & " "), vbTextCompare)
    If myF > 0 Then
        With Target.Characters(Start:=myF, Length:=Len(myWords(I))).Font
            .Bold = myBold(I)
            .Color = myColors(I)
            If myUnderl(I) = 0 Then .Underline = xlUnderlineStyleNone Else .Underline = xlUnderlineStyleSingle
            If mySize(I) > 0 Then .Size = mySize(I)
        End With
    End If
Next I
'
Application.EnableEvents = True
End Sub

Lavora con un dizionario di parole, con relativi stili di formattazione (ho previsto Grassetto, Sottolineato, Dimensione e Colore); e' necessario che i cinque "Array" contengano lo stesso numero di voci.
Quanto al colore, invece del "ColorIndex" ho preferito usare il "Color", impostandolo con la funzione Rgb; oltre ai tre colori primari (Rosso, Verde, Blue), sono facilmente ottenibili il giallo (255,255,0), magenta (255, 0, 255), ciano (0, 255, 255), nero (0, 0, 0); la varieta' di colori impostabili e' comunque tutta quella consentita da excel.

C' e' un problema legato al riconoscimento del testo da formattare: volendo poter disciminare ad esempio "dimesso" da "dimessosi" il confronto lavora a "parola", e questo potrebbe creare qualche problema con eventuali caratteri speciali; la macro "neutralizza" i segni di punteggiatura piu' comuni (punto, virgola, punto interrogativo; vedi istruzione "myTarget = ... "), ma trascura altri segni quali esclamativo, parentesi, due punti, etc. Se questo e' un problema allora bisogna aggiungere una nuova linea "myTarget =" che trasformi questi altri segni in "spazio".

Quanto proposto ha senso se ci sono molte parole e vari stili di formattazione...

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formattazione condizionale

Postdi fantina » 03/05/14 20:58

:) che bella questa cosa Anthony!!!
... solo che ho provato ad aumentare le mie paroline e ovviamente ho fatto qualche paciugo perchè non mi funziona come il tuo..

Application.EnableEvents = False
'il mio dizionario di Parole, Grassetto, Sottolineato, Colore
myWords = Array("Rimpatriato", "Dimesso", "Richiamare", "Clara", "Piera")
myBold = Array(1, 1, 1, 1, 1) '1=Si, 0=No
myUnderl = Array(0, 1, 0, 1, 1) 'idem
mySize = Array(0, 14, 0, 0, 0) '0=default, >0=imposta
myColors = Array(RGB(255, 0, 0), RGB(0, 255, 0), RGB(255, 255, 0), RGB(255, 0, 255), RGB(0, 0, 0))

dov'é l'errore, che io non lo vedo? :(
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Formattazione condizionale

Postdi Anthony47 » 04/05/14 01:40

Nel messaggio precedente non mi sono soffermato su alcuni dettagli...
-La macro lavora sull' evento Worksheet_Change, quindi va nel modulo del foglio su cui si lavora (come quella di Ricky): tasto dx sul tab col nome del foglio, scegli Visualizza codice; si apre l' editor delle macro nel punto giusto, copi il codice e lo incolli nel frame di dx (in sostituzione di eventuali Sub Worksheet_Change gia' inserite).
-La riga marcata <<< va personalizzata con l' area entro cui si vuole far lavorare la macro; io avevo usato "B1:B100"
In questo modo quando scrivi una parola presente nel "dizionario" nell' area dichiarata, la macro interviene per applicare la formattazione definita nei vari array
Io ho provato a inserire il tuo dizionario nel mio codice, ottenendo ad esempio il risultato che vedi nell' immagine:
Immagine
image hosting

Tu che prove hai fatto e con che risultati?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formattazione condizionale

Postdi fantina » 04/05/14 14:29

Ciao Anthony,
io avevo inserito il tuo primo codice, poi ero andata solo ad aggiungere le parole nel dizionario e gli Array come li vedi. Avevo mantenuto il tuo stesso esempio dell'area B1:B100, per non complicarmi la vita. Oggi ancora non funzionava e siccome era solo un file di prova ne ho aperto un altro e ho rifatto tutto daccapo; probabilmente l'errore era altrove dato che ora, dopo aver aggiunto le mie paroline e tutti gli Array funziona tutto! :) :) :)
Grazie mille! Il risultato è bellissimo!!
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24


Torna a Applicazioni Office Windows


Topic correlati a "Formattazione condizionale":


Chi c’è in linea

Visitano il forum: Ricky0185 e 61 ospiti