/ / Formattazione condizionale mediante VBA, Stile dinamico di un intervallo facendo riferimento a un'altra cella per la formattazione - excel, vba, dinamico, formattazione, condizionale

Formattazione condizionale con VBA, Styling dinamico di un intervallo facendo riferimento a un'altra cella per la formattazione - excel, vba, dynamic, formatting, condizionale

Ecco il mio problema

inserisci la descrizione dell'immagine qui

Quindi, applicato all'intervallo K3:K10, Ho diverse diverse formattazioni condizionaliregole che richiedono una stringa di testo specifica comprendente il contenuto di una cella di riferimento più una stringa di testo costante. Ogni regola applica un colore diverso per una specifica cella di riferimento e una stringa di testo costante (DEAD o ALIVE). Ad esempio, nell'intervallo, se una cella contiene la parola "Cane", quindi uno spazio, e quindi la parola "Morto", verrà formattato Rosso. La legenda in colonne D e E mostra quali colori si applicano a ciascun animale per la combinazione di criteri (animale e morto / vivo). Quello che voglio fare è essere in grado di scegliere un colore per un animale con un elenco a discesa in Colonna Ce fare in modo che la CF cambi la formattazione di una qualsiasi delle celle all'interno dell'intervallo K3:K10 per abbinare la formattazione / lo stile della riga rilevante nella colonna C quando una regola particolare è vera.

Quindi se K3 è "Dog Dead", quindi applica la stessa formattazione della cella D3 o se è "Dog Alive" applica la stessa formattazione di E3. Non voglio semplicemente chiedere a CF di creare una cella contenente rosso "Dog Dead" o "Dog Alive" rosso chiaro, perché il colore del cane potrebbe non essere rosso. Potrebbe essere verde o blu.

Quindi, credo di voler ottenere una formattazione condizionale dinamica usando VBA, penso. Qualcuno può aiutarmi a iniziare?

Grazie,

Andy.

risposte:

0 per risposta № 1

Punto di partenza !!
Nell'evento Sheet:

Private Sub Worksheet_Change(ByVal Target As Range)
ApplyCond Range("K" & Target.Row)
End Sub

E in un modulo:

Public Sub ApplyCond(xx As Range)
If xx.Value = "" Then Exit Sub
xx.FormatConditions.Delete
xx.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
Formula1:=xx.Value
kk = Split(xx.Value)
a = -1
b = -1
For i = LBound(kk) To UBound(kk)
Select Case kk(i)
Case "Dead": a = 4
Case "Alive": a = 5
Case Else
For e = 3 To 9999
If Range("B" & e).Value = "" Then Exit For
If Range("B" & e).Value = kk(i) Then
b = e
End If
Next
End Select
Next

" Apply Format
On Error Resume Next
If (a > 0) And (b > 0) Then
With xx.FormatConditions(1).Interior
.PatternColorIndex = Cells(b, a).Interior.PatternColorIndex
.Color = Cells(b, a).Interior.Color
.TintAndShade = Cells(b, a).Interior.TintAndShade
.Pattern = Cells(b, a).Interior.Pattern
.PatternThemeColor = Cells(b, a).Interior.PatternThemeColor
.ThemeColor = Cells(b, a).Interior.ThemeColor
.PatternTintAndShade = Cells(b, a).Interior.PatternTintAndShade
End With
With xx.FormatConditions(1).Font
.Bold = Cells(b, a).Font.Bold
.Italic = Cells(b, a).Font.Italic
.Underline = Cells(b, a).Font.Underline
.Strikethrough = Cells(b, a).Font.Strikethrough
.ThemeColor = Cells(b, a).Font.ThemeColor
.TintAndShade = Cells(b, a).Font.TintAndShade
.Color = Cells(b, a).Font.Color
.TintAndShade = Cells(b, a).Font.TintAndShade
End With
End If
End Sub

È necessario verificare la formula di divisione. Forse è meglio usare una funzione LCase o un altro filtro.
Nella mia funzione non uso la colonna "C".