Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何获得动态单元格列表的最大值?_Excel_Vba_Function - Fatal编程技术网

Excel 如何获得动态单元格列表的最大值?

Excel 如何获得动态单元格列表的最大值?,excel,vba,function,Excel,Vba,Function,我有一个excel表格,其中有一个B列,其中有100多行是通过RTD链接动态生成的 该RTD链路每毫秒更新一次,并且值不断增加,直到在给定时刻变为零。我不需要毫秒精度,我只需要最后一个值,在它变为零之前 在B列中的单元格变为零之前,我需要在C列存储所有的最大值 我尝试了VBA函数和SUB,下面是一些示例 Function max(ByVal currentValue As Range, ByVal cel As Range) As Double If (currentValue

我有一个excel表格,其中有一个B列,其中有100多行是通过RTD链接动态生成的

该RTD链路每毫秒更新一次,并且值不断增加,直到在给定时刻变为零。我不需要毫秒精度,我只需要最后一个值,在它变为零之前

在B列中的单元格变为零之前,我需要在C列存储所有的最大值

我尝试了VBA函数和SUB,下面是一些示例

Function max(ByVal currentValue As Range, ByVal cel As Range) As Double
    
    If (currentValue.value) > cel.value Then
        cel.value = currentValue.value
        max = cel.value
    Else
        max = currentValue.value
    End If

End Function

您可以在工作表_Change事件中放置一些内容,以查看B列的任何更改,并将所有较大的数字保存到C列

Private子工作表\u更改(ByVal目标作为范围)
变暗ColB作为范围,单元格作为范围
设置ColB=Intersect(目标,Me.Columns(2))
'如果B列中的值已更改
如果不是感冒,那就什么都不是了
对于ColB中的每个单元格
'如果B大于C,则将值保存到C
如果cell.Value>cell.Offset(0,1).Value,则
cell.Offset(0,1).Value=cell.Value
如果结束
下一个细胞
如果结束
端接头

Intersect方法比较两个范围,并仅返回它们共有的单元格。这是一种快速检查某个范围是否与我们关注的区域重叠的方法,并将其用作循环集可确保代码仅在对B列进行更改时运行。

我想我是通过另一种方法进行的:

Private Sub Worksheet_Calculate()
Dim rng As Range
Set rng = Me.Range("B3:B7")

For i = 3 To 7

    If Range("B" & i) > Range("C" & i) Then
        Range("C" & i) = Range("B" & i)
    End If

Next i

End Sub

我认为您可能需要查看
工作表。更改
事件并测试
目标()
是否更改为零。如果是,请使用
application.Undo
并检索最后一个值,即最大值。如果这将能够处理RTD数据的变化,所有的时间,我不知道=)工作表。改变不运行时,RTD链接更新。。。因此,我尝试使用一些函数,但我不知道如何操作最好的方法是覆盖
工作表\u更改
。但由于它不起作用,我们可以创建一个无限循环,并在特定的时间间隔内继续检查值。我们需要重写工作簿_Open()并将无限循环放在那里。这应该行得通。然而,这一点都不优雅,excel可能会崩溃。@Roy,我以前试过这个循环。。。excel不支持和崩溃,这正是您所认为的。我认为最好的方法是创建一个存储最大值的函数。我正在研究这个,有什么建议吗?也许这会有帮助。更新RTD链接时,Workbench.change不会运行。我尝试了工作表。计算,但也没有成功。。。正因为如此,我正在尝试制作一个保持最大值的函数,但我不知道如何去做,我想你必须使用其他的东西。我现在正在阅读有关RTD函数的内容,您似乎可以将所有RTD数据保存到一个数组中,然后在数组上使用MAX函数。不幸的是,我没有office 365,所以我不能给你一段经过测试的代码来演示这一点。