Como criar uma regra que altere uma célula com base em seu valor anterior

1

Estou tentando criar uma regra para que, se o valor da célula mudar, ela mude de cor com base em seu valor anterior. por exemplo Se o valor anterior for menor que o novo valor, então eu quero que ele mude para o azul else, se o valor for maior, eu quero mudá-lo para verde. Se é o mesmo, mude para laranja. Eu acho que estou tentando comparar a célula com ela própria e não com outra célula. Isso é possível no excel?

Eu tentei usar o maior que a fórmula, mas isso não funcionou!

    
por The Yous 24.12.2015 / 17:18

2 respostas

4

Você pode usar um truque antigo para fazer exatamente isso sem o VBA:

Primeiro, vá para Arquivo - > Opções - > Fórmulas - > Ative o cálculo iterativo. Isso permite "referências circulares", fórmulas que se referem às suas próprias células :

Iteration is the repeated recalculation of a worksheet until a specific numeric condition is met. Excel cannot automatically calculate a formula that refers to the cell — either directly or indirectly — that contains the formula. This is called a circular reference. If a formula refers back to one of its own cells, you must determine how many times the formula should recalculate. Circular references can iterate indefinitely. However, you can control the maximum number of iterations and the amount of acceptable change.

Suponho que A1 é a sua célula que você quer fazer o que está procurando. B1 e C1 são células auxiliares, que são calculadas em ordem:

B1: =IF(A1<>C1,C1,B1)
C1: =IF(B1=C1,A1,C1)

Agora, sempre que você alterar o valor da célula A1, em B1 será o último valor:

----> iterations when A1 is edited

A1:     1 |     2      2 |     3      3       3
B1: =B1=1 | =C1=1  =B1=1 | =C1=1  =B1=2   =B1=2
C1: =C1=1 | =A1=1  =C1=2 | =A1=2  =C1=2   =C1=3

Defina a formatação condicional para comparar A1 com B1 para obter o que você deseja (exceto "se for a mesma alteração para laranja" ). As células auxiliares podem ser escondidas ou estar em diferentes folhas ... não importa, desde que a ordem não seja alterada.

Para fazer isso em uma célula, você pode usar:

B1: =IFERROR(IF(RIGHT(B1,LEN(B1)-FIND(" ",B1))<>TEXT(A1,"@"),RIGHT(B1,LEN(B1)-FIND(" ",B1))&" "&A1,B1),"0 "&A1)

para comparar, você precisa usar:

    =(LEFT(B1,FIND(" ",B1))*1)>A1 (for new value is smaller)
    =(LEFT(B1,FIND(" ",B1))*1)<A1 (for new value is bigger)

Para fazer isso no Long way, você pode usar:

=IFERROR(IF(MID(B1,FIND(" ",B1)+1,LEN(B1)-FIND(" ",B1)-11)<>TEXT(A1,"@"),MID(B1,FIND(" ",B1)+1,LEN(B1)-FIND(" ",B1)-10)&A1&" "&TEXT(NOW()*72000,"0"),IF(AND(((NOW()*72000)-2)>(RIGHT(B1,10)*1),CELL("address")=CELL("address",A1)),A1&" "&A1&" "&TEXT(NOW()*72000,"0"),B1)),"0 "&A1&" "&TEXT(NOW()*72000,"0"))

Sempre que o A1 for alterado, ele será rastreado. Ele também será rastreado se um recálculo for disparado enquanto A1 estiver selecionado e a última alteração registrada tiver mais de 2 segundos. A formatação condicional permanece a mesma (mas agora também é alterada para o valor antigo):

    =(LEFT(B1,FIND(" ",B1))*1)>A1 (for new value is smaller)
    =(LEFT(B1,FIND(" ",B1))*1)<A1 (for new value is bigger)
    =(LEFT(B1,FIND(" ",B1))*1)=A1 (for new value is same)

Outra maneira pode ser a opção "Pasta compartilhada". Enquanto rastreia alterações em uma folha separada. Com uma simples pesquisa, você pode optar pela última alteração feita em uma célula específica (o evento informará o valor antigo) que você pode usar como referência na formatação condicional.

    
por 25.12.2015 / 17:18
2

O valor antigo não é mantido em nenhum lugar pelo Excel, então é impossível fazer isso como uma regra.

Talvez você possa escrever uma macro, que define a cor no momento da alteração, mas depois, quando o valor antigo se foi, não há como calcular a cor novamente, por isso é necessariamente uma configuração fixa de a cor - caso contrário, após salvar / carregar, como o Excel saberia como colorir a célula? Você pode na macro copiar o valor antigo para outro lugar para mantê-lo, não tenho certeza.

    
por 24.12.2015 / 17:28