Excel 单元格引用其先前的值(条件格式)

Excel 单元格引用其先前的值(条件格式)

我对条件格式的掌握很好。但是,有一个用例我还没搞清楚,也许有人可以给我一些提示,告诉我如何实现它。

我正在表格上创建 MarketWatch 金融工具列表。实时数据不断涌入并不断变化。

我的问题是 - 如果股票 ABC 的实时价格信息为 5.00 美元,然后上涨,比如说上涨到 5.50 美元,我希望单元格变为绿色。如果后续值现在变为 5.40 美元(低于同一单元格的“先前”值),我希望单元格变为红色。依此类推。

主要的一点(这使得它很棘手)是 - 单元格引用是动态的 - 因为它引用它自己的先前值),而不是静态的“其他单元格”。

有哪些可能性可以实现这一目标?

在此处输入图片描述

答案1

您需要手动执行此操作,因为标准条件格式不支持它。

你可以处理这个事件: Private Sub Worksheet_Change(ByVal Target As Range)

实现此目的的方法如下所示: https://stackoverflow.com/questions/409434/automatically-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

相关内容