3

Я хорошо разбираюсь в условном форматировании в целом. Однако, один вариант использования, который я пока не смог выяснить, возможно, кто-то может подсказать мне, как этого добиться.

Я создаю список финансовых инструментов MarketWatch на листе. Живые данные приходят и часто меняются.

Мой вопрос - если цена в реальном времени для Stock ABC составляет 5,00 долларов США, а затем увеличивается, скажем, до 5,50 долларов США, я бы хотел, чтобы ячейка стала зеленой. Если последующее значение теперь превратится в 5,40 доллара США (что меньше, чем "предыдущее" значение той же ячейки), я бы хотел, чтобы ячейка стала красной. И так далее на постоянной основе.

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

Какие возможности могут существовать для достижения этой цели?

1 ответ1

1

Вам нужно будет сделать это вручную, так как это не поддерживается стандартным условным форматированием.

Вы можете обработать это событие:Private Sub Worksheet_Change(ByVal Target As Range)

Способ сделать это показан здесь:https://stackoverflow.com/questions/409434/automatics-execute-an-excel-macro-on-a-cell-change

Вам нужно сравнить Target с текущим значением ячейки. Затем вы можете установить цвет ячейки, используя cell.Interior.ColorIndex = ...

-

Две вещи в ответ на комментарий:

Вы правы, что Change относится только к изменениям, инициированным пользователем. Для получения перерасчетов вам также необходимо обработать событие Calculate . Вот пример этого.

Private Sub Worksheet_Calculate()
  Call updateme
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  Call updateme
End Sub

Эти две функции вызывают другую подпрограмму updateme всякий раз, когда происходит любое из этих событий.

В этой функции вам нужно проверить, изменилось ли значение, а затем принять решение об изменении цвета. Это означает отслеживание предыдущего значения в глобальной переменной. Вы могли бы сделать это:

Private Sub updateme()
  Set cell = ActiveSheet.Range("A5")
  newval = cell.Value
  If newval > lastval Then
    cell.Interior.ColorIndex = 3
  End If
  If newval < lastval Then
    cell.Interior.ColorIndex = 4
  End If
  If newval = lastval Then
    cell.Interior.ColorIndex = 2
    End If
lastval = newval
End Sub

Как вы отслеживаете это значение lastval между вызовами функций? Вам нужно инициализировать переменную lastval как глобальную переменную. Для этого вам нужно создать новый "Модуль" в редакторе VBA и добавить его в модуль:

Public lastval As Double

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