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.