我有这个工作表从API获取数据,每200毫秒刷新一次。我想计算每200毫秒不断增加的值变化。例如,单元格B2在200毫秒后的值为4,然后变为7然后变为16然后变为26等,它只是不断向其中添加值。我想要的是从最新值中减去旧值以获得更改,例如7-4 = 3或16-7 = 9或26-16 = 10.
我添加了一张图片以便澄清。这显示了我如何从软件中获取数据。 worksheet http://i64.tinypic.com/2uny5w2.png
还有一张图片:
答案 0 :(得分:1)
首先,通过转到File - >在Excel中启用迭代计算;选项 - >然后选中公式,然后选中"启用迭代计算"。
旁边的框您需要定义以下单元格:
cell B1 0 (set to 1 to reset)
cell B2 =IF($B$1 = 1,, $B$2 + 1)
使用以下公式并从B9中填写您想要查看的更多更改(此公式假设您将最大迭代次数设置为100):
cell B9 =IF($B$1 = 1,"", IF($B$2 / 100 = $A9, $B$5, B9))
我会尝试在这里展示一个例子。如果您自动更新的单元格是B5,则在刷新单元格时将在B9及更低版本中跟踪更改。它可能不是你想要的,但我认为它很接近。
A B
1 reset 0
2 count 500
3
4
5 price 9
6
7
8 ID price
9 1 11
10 2 12
11 3 13
12 4 12
13 5 9
答案 1 :(得分:0)
我建议基于工作表更改事件处理的VBA解决方案。打开 VBA项目,并将以下代码放入 Microsoft Excel对象部分中的目标工作表中:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
' add reference to Microsoft Scripting Runtime via Menu - Tools - References
Const Scope = "C2:C5" ' monitoring area
Const DX = 1 ' horizontal result offset
Const DY = 0 ' vertical result offset
Const Buf = 0 ' FIFO buffer size
Static oData(0 To Buf) As New Dictionary
Static oIndex As New Dictionary
Dim rCells As Range
Dim oCell
Dim i As Long
Set rCells = Application.Intersect(Target, Target.Parent.Range(Scope))
If Not rCells Is Nothing Then
For Each oCell In rCells
With oCell
i = oIndex(.Address)
.Offset(DY, DX).Value = .Value - oData(i)(.Address)
oData(i)(.Address) = .Value
i = i + 1
If i > Buf Then i = 0
oIndex(.Address) = i
End With
Next
End If
End Sub
我为常量添加了一些注释。在Scope
中设置要监控的更改范围,在DX
和DY
中输出结果增量的偏移量,并且该算法不仅支持计算增量值和以前的数字,但也可以通过组织为字典数组的缓冲区为每个目标单元格的任意数量的帧之间设置,因此在Buf
中设置缓冲区的大小,如果您不想使用缓冲区,则只需离开{ {1}}大小,e。 G。对于您的情况,0
的值将计算最后一个值与延迟800毫秒之间的差值。
<强>更新强>
评论中提供了稍微简化的代码版本,将以下代码放入目标工作表中:
3