| Formattazione condiz. VBA di
Barbara |
Salve ragazzi, complimenti per il forum
innanzitutto, è interessantissimo, mi è stato spesso molto utile, ma
stavolta ho proprio bisogno del vostro aiuto per risolvere un paio
di problemi: ho una serie di 4 colonne (b,c,d,e,f,) con dati che
vengono aggiunti più o meno giornalmente ed avrei bisogno: 1-
che il valore più alto ed il più basso delle colonne b, d, e, f
vengano evidenziati con due colori del testo diversi; 2-poichè
il valore del dato nella colonna c varia molto di rado vorrei che
solo in corrispondenza della variazione venisse evidenziata l'intera
riga ad es. con testo in grassetto o con sfondo diverso. So che
che non sono cose difficili ma non saprei proprio da dove partire,
... me la date una mano ? grazie
in anticipo !!!! |
|
| di Mauro |
Ciao Barbara, La routine sottostante scorre la
colonna A ed evidenzia in colore diverso il testo della cella col
valore + alto. Lascio a te trovare la routine di calcolo x il valore
+ basso Sub TrovaMax() indi = 1 ComVal = 0 Do Until
Range("A" & indi) = "" If Range("A" & indi).Value >
ComVal Then ComVal = Range("A" & indi).Value indRif =
indi End If indi = indi + 1 Loop Range("A" &
indRif).Font.ColorIndex = 6 End Sub
Scorre la colonna A
in corrispondenza della variazione evidenzia l'intera riga Sub
TrovaCamb() indi = 2 Do Until Range("A" & indi) = ""
If Range("A" & indi).Value <> Range("A" & indi -
1).Value Then Rows(indi & ":" & indi).Select With
Selection.Interior .ColorIndex = 33 .Pattern = xlSolid
End With End If indi = indi + 1 Loop End
Sub |
|
| di Barbara |
ciao Mauro, grazie tante per l'aiuto
innanzitutto...ho provato il
tuo codice ed ho adattato cosi' la prima parte perchè avevo bisogno
che riportasse al colore originale i valori precedenti: Private
Sub Worksheet_SelectionChange(ByVal Target As Range) indi = 2
'questo perchè nella prima è intestazione e non numeri ComVal =
0
Do Until Range("B" & indi) = "" If Range("B" &
indi).Value >= ComVal Then ComVal = Range("B" &
indi).Value indRif = indi End If indi = indi + 1
Loop Range("B:B").Interior.ColorIndex = xlColorIndexNone
Range("B:B").Font.ColorIndex = xlColorIndexAutomatic
Range("B" & indRif).Interior.ColorIndex = 3 Range("B"
& indRif).Font.ColorIndex = 2
potrebbe anche andare
anche se mi da qualche problemino: 1) ovviamente mi cancella lo
sfondo anche della cella B1 dove c'è il titolo della colonna e che
non dovrebbe variare. 2) in assenza di numeri mi da errore
3) domanda: per ottenere la stessa cosa anche per la colonne D E
ed F devo ripetere la routine per 4 volte? oppure c'è un modo più
semplice visto che lo stesso lavoro vorrei farlo per i valori più
bassi (mi troverei così la analoga routine ripetuta per 8 volte)?
per quanto riguarda la seconda parte invece ci dev'eesere
proprio qualcosa che non va perchè non mi va ad evidenziare con il
grassetto il testo delle celle corrispondenti al variare della cella
B, ma semplicemente mi mantiene selezionata l'intera riga senza
peraltro darmi modo di fare nient'altro ....so che forse sto
approfittando della tua disponibilità, ma per me sarebbe veramente
importante riuscire finalmente a finire questa cosa Grazie !!!! |
|
| di Mauro |
Riguardo i problemini: 1) x evitare di
modificare la prima riga devi operare cella x cella o dopo avere
modificato la colonna ripristini la prima riga. 2)la funzione
che testa la numericità di un campo è IsNumeric() 3)o ripeti 4
volte il ciclo o usi una routine con passaggio parametri
per
quanto riguarda la seconda parte non ti mantiene selezionata
l'intera riga semplicemente la colora! Se non vuoi modificare lo
sfondo ma mettere il carattere grassetto, fai qualche prova con il
generatore di macro e vedi come varia il codice.
Se vuoi
sdebitarti un modo c'è, tieni d'occhio il forum e dai il tuo aiuto
se vedi una discussione a cui riesci a rispondere. C'è la
possibilità di ricevere via mail l'avviso di nuova discussione con
relativo link diretto. Ciao |
|
| Alternativa di Ricky |
Non so se ti possa essere ancora utile ma io lo
risolverei così:
Sub Min_MaX() Set MinimoB =
Range("B:B") Set massimoB = Range("B:B") MinimoB =
WorksheetFunction.Min(MinimoB) massimoB =
WorksheetFunction.Max(massimoB)
Columns("B:B").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlEqual, _ Formula1:=MinimoB If MinimoB <> 0
Then Selection.FormatConditions(1).Interior.ColorIndex = 36
Else Selection.FormatConditions.Delete End If
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlEqual, _ Formula1:=massimoB If massimoB <>
0 Then Selection.FormatConditions(2).Interior.ColorIndex = 3
Selection.FormatConditions(2).Font.ColorIndex = 2
Else
Selection.FormatConditions.Delete End If ' Trova il
valore minimo e massimo colonna D Set MinimoD = Range("D:D")
Set massimoD = Range("D:D") MinimoD =
WorksheetFunction.Min(MinimoD) massimoD =
WorksheetFunction.Max(massimoD)
Columns("D:D").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlEqual, _ Formula1:=MinimoD If MinimoD <> 0
Then Selection.FormatConditions(1).Interior.ColorIndex = 36
Else Selection.FormatConditions.Delete End If
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlEqual, _ Formula1:=massimoD If massimoD <>
0 Then Selection.FormatConditions(2).Interior.ColorIndex = 3
Selection.FormatConditions(2).Font.ColorIndex = 2 Else
Selection.FormatConditions.Delete End If ' Trova il
valore minimo e massimo colonna E Set MinimoE = Range("E:E")
Set massimoE = Range("E:E") MinimoE =
WorksheetFunction.Min(MinimoE) massimoE =
WorksheetFunction.Max(massimoE)
Columns("E:E").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlEqual, _ Formula1:=MinimoE If MinimoE <> 0
Then Selection.FormatConditions(1).Interior.ColorIndex = 36
Else Selection.FormatConditions.Delete End If
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlEqual, _ Formula1:=massimoE If massimoE <>
0 Then Selection.FormatConditions(2).Interior.ColorIndex = 3
Selection.FormatConditions(2).Font.ColorIndex = 2 Else
Selection.FormatConditions.Delete End If
' Trova il
valore minimo e massimo colonna F Set MinimoF = Range("F:F")
Set massimoF = Range("F:F") MinimoF =
WorksheetFunction.Min(MinimoF) massimoF =
WorksheetFunction.Max(massimoF)
Columns("F:F").Select
Selection.FormatConditions.Delete
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlEqual, _ Formula1:=MinimoF If MinimoF <> 0
Then Selection.FormatConditions(1).Interior.ColorIndex = 36
Else Selection.FormatConditions.Delete End If
Selection.FormatConditions.Add Type:=xlCellValue,
Operator:=xlEqual, _ Formula1:=massimoF If massimoF <>
0 Then Selection.FormatConditions(2).Interior.ColorIndex = 3
Selection.FormatConditions(2).Font.ColorIndex = 2 Else
Selection.FormatConditions.Delete End If
Range("J2").Select End Sub
...non credevo date
le mie scarse conoscenze di poter essere utile a
qualcuno...eheheh!...e soprattutto avevo sottovalutato l'importanza
del generatore di macro che con qualche piccola modifica di codice
qua e la permette di ottenere grandi risultati .. |
|