Use uma célula como um 'template' para formatação condicional

0

Talvez eu esteja sendo burro e perdendo um truque, mas estou tentando criar um exemplo de arquivo do Excel para formatação condicional.

Estou feliz com a criação de regras de formato condicional, mas estou com um problema ao definir a seção 'formato' dinamicamente.

No exemplo abaixo, estou procurando a regra destacada para usar a formatação da célula I4 se o quadrado contiver 'x' - dessa forma, se eu alterar a formatação de I4 para, digamos, um fundo vermelho, essa regra será atualizar automaticamente de acordo.

Eu dei uma olhada e não consigo encontrar algo parecido com o tipo de 'pintor de formato'. Isso é possível?

    
por jbutler483 16.10.2017 / 20:03

1 resposta

2

Verifique se esta solução baseada em VBA está bem com você. Ele ainda cria internamente as mesmas regras de formatação condicional conforme o necessário, mas, por meio do código VBA, decide agora o índice de cores com base na cor das células em I4 e I5.

Este exemplo segue o mesmo intervalo da sua pergunta. Intervalo B4: D6 para aplicar formatação condicional e usar cor de referência de I4 & I5.

Em sua planilha, diga Sheet1, pressione ALT + F11 . O editor do VBA será aberto. Clique duas vezes em Sheet1 no painel esquerdo e, no lado direito, selecione Editor de código (First Drop Down) e, em seguida, Change Event (Second Drop Down).

Após a sub-rotina, o espaço reservado estará disponível para você.

Private Sub Worksheet_Change(ByVal Target As Range)

End Sub 

Dentro desta sub-rotina, coloque o código VBA abaixo.

'On WorkSheet Change Event Check for Change in C5 and that too if X or O is entered in it.
If Target.Address = "$C$5" Then
    If UCase(Target) = UCase(Range("G4").Value) Or UCase(Target) = UCase(Range("G5").Value) Then
        'First clear the Conditional formatting at B4:D6

        Range("B4:D6").Select
        Selection.FormatConditions.Delete
        Range("C5").Select

        'Set the conditional formatting at B4:D6
        Range("B4:D6").Select
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$C$5=$G$4"
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior

            .Color = Range("I4").Interior.Color

        End With
        Selection.FormatConditions(1).StopIfTrue = False
        Range("B4:D6").Select
        Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$C$5=$G$5"
        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Interior

            .Color = Range("I5").Interior.Color

        End With
        Selection.FormatConditions(1).StopIfTrue = False
        Range("C5").Select

    End If

End If

Salve e saia do editor do VBA. Agora, toda vez que você alterar o valor no código C5 da célula, verificará se é C5 e se X ou O são inseridos nele e recriar as regras de formatação condicional se aplica a B4: D6 com base na cor de I4 & I5.

No entanto, você precisará inserir novamente o valor em C5 para que este código funcione depois de modificar a cor de segundo plano em I4 e / ou I5. VBA Não oferece nenhum evento de mudança de cor de fundo para capturar nativamente. No entanto, seria possível interceptar esses eventos usando o código VBA novamente.

    
por 17.10.2017 / 00:58