1

Я пытаюсь создать правило так, чтобы при изменении значения ячейки цвет изменялся в зависимости от предыдущего значения. например, если его предыдущее значение было меньше его нового значения, тогда я хочу, чтобы оно изменилось на синий, иначе, если его значение больше, я хочу изменить его на зеленый. Если это то же самое, измените его на оранжевый. Думаю, я пытаюсь сравнить клетку с собой, а не с другой клеткой. Это возможно в Excel?

Я пытался использовать формулу «больше, чем сам», но это не сработало!

2 ответа2

4

Вы можете использовать старый трюк, чтобы сделать именно это без 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)

Другим способом может быть опция "Общая книга". Пока отслеживать изменения на отдельном листе. С помощью простого поиска вы можете перейти к последним изменениям, внесенным в конкретную ячейку (событие укажет старое значение), которые вы можете использовать в качестве ссылки в условном форматировании.

2

Старое значение нигде не хранится в Excel, поэтому сделать это, как правило, невозможно.

Возможно, вы можете написать макрос, который жестко задает цвет в момент изменения, но после этого, когда старое значение пропало, нет способа вычислить цвет когда-либо снова, поэтому это обязательно фиксированная настройка цвета - иначе, после сохранения / загрузки, как Excel узнает, как покрасить ячейку? Вы можете быть в макросе, чтобы скопировать старое значение в другое место, чтобы сохранить его, не уверен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .