Вы можете использовать старый трюк, чтобы сделать именно это без VBA:
Сначала перейдите в Файл -> Параметры -> Формулы -> Включить итеративный расчет. Это позволяет использовать "круговые ссылки", формулы, которые ссылаются на свои собственные ячейки:
Итерация - это повторный пересчет листа до тех пор, пока не будет выполнено определенное числовое условие. Excel не может автоматически рассчитать формулу, которая ссылается на ячейку - прямо или косвенно - которая содержит формулу. Это называется круговой ссылкой. Если формула ссылается на одну из своих собственных ячеек, вы должны определить, сколько раз формула должна пересчитываться. Циркулярные ссылки могут повторяться бесконечно. Тем не менее, вы можете контролировать максимальное количество итераций и количество допустимых изменений.
Я полагаю, A1 как ваша клетка, вы хотите делать то, что вы ищете. B1 и C1 являются хелперами, которые рассчитываются по порядку:
B1: =IF(A1<>C1,C1,B1)
C1: =IF(B1=C1,A1,C1)
Теперь всякий раз, когда вы меняете значение ячейки A1, в B1 указывается последнее значение:
----> 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
Установите условное форматирование, чтобы сравнить A1 с B1, чтобы получить то, что вы хотите (за исключением «если это то же самое, измените его на оранжевый»). Вспомогательные ячейки могут быть скрыты или находиться на разных листах ... не имеет значения, если порядок не изменяется.
Чтобы сделать это в одной ячейке, вы можете использовать:
B1: =IFERROR(IF(RIGHT(B1,LEN(B1)-FIND(" ",B1))<>TEXT(A1,"@"),RIGHT(B1,LEN(B1)-FIND(" ",B1))&" "&A1,B1),"0 "&A1)
Для сравнения нужно использовать:
=(LEFT(B1,FIND(" ",B1))*1)>A1 (for new value is smaller)
=(LEFT(B1,FIND(" ",B1))*1)<A1 (for new value is bigger)
Чтобы сделать это Долгий путь, вы можете использовать:
=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"))
Всякий раз, когда A1 изменяется, он будет отслеживаться. Он также будет отслеживаться, если будет произведен пересчет, пока выбран A1, а последнее записанное изменение старше 2 секунд.
Условное форматирование остается тем же самым (но теперь также идет для изменения к старому значению):
=(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)
Другим способом может быть опция "Общая книга". Пока отслеживать изменения на отдельном листе. С помощью простого поиска вы можете перейти к последним изменениям, внесенным в конкретную ячейку (событие укажет старое значение), которые вы можете использовать в качестве ссылки в условном форматировании.