首页 > 解决方案 > 扩大范围内的最大值

问题描述

我如何处理以下任务?在单元格 A2 中,我有一个公式可以连续迭代并提供结果。每次迭代的结果都列在 B2、B3 等中。

同时在 C2、C3 等中,我捕获了相应的时间戳。基本上,经过几次迭代后,我在 B 列中有一个结果列表,在 C 列中有一个时间戳列表。我已经设法编写了这部分代码。

现在我的问题是:由于我有时间戳,我会在某一时刻知道在第一分钟内生成了例如 6 个结果。因此,我们正在查看的结果范围是 B2:B7。

基于该扩展范围,我需要在 E2 中捕获最大结果,因为范围随每次迭代而变化,直到达到 B7。由于我不知道在第一分钟内会产生多少结果,我需要在每次迭代时更新 E2。一旦第 2 分钟开始,我希望能够做同样的事情并在 E3 中捕获最大结果。显然,新范围将从 B8 开始,并根据 A2 中完成的计算次数而扩大。

如果我能做 10 分钟,我将在 E2 到 E11 的范围内显示 10 个最大结果。

下面是我的代码。它仅部分执行了我上面描述的内容。任何想法如何使它工作?非常感谢您的帮助!谢谢!

在以下链接下,我已经可视化了问题: 图像1

Private Sub Worksheet_Calculate()
Dim lastrow As Long

lastrow = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row

With Worksheets(1).Cells(lastrow, 2)
    .Offset(1, 0) = Cells(2, 1).Value
    .Offset(1, 1) = FormatDateTime(Now, vbLongTime)
End With

Call Generator

End Sub

Sub Generator()
Dim icount As Long
Dim rcount As Long

icount = 2
rcount = 2
For tcount = 1 To 10
    Do While DateDiff("s", Cells(2, 3), Cells(icount, 3)) <= tcount * 60 
        Cells(tcount + 1, 5) = WorksheetFunction.Max(Range(Cells(rcount,   2), Cells(icount, 2))) 
        icount = icount + 1
    Loop
rcount = icount
Next tcount

End Sub

标签: excelvba

解决方案


解决此问题的一种方法是检查每次迭代的时间,如果分钟不同,请随时填充列 E。

像这样的东西:

Private Sub Worksheet_Calculate()
Dim lastrow As Long

lastrow = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row

With Worksheets(1).Cells(lastrow, 2)
    .Offset(1, 0) = Cells(2, 1).Value
    .Offset(1, 1) = FormatDateTime(Now, vbLongTime)
    If Minute(.Offset(1, 1).Value) <> Minute(.Offset(0, 1).Value) Then
        .Offset(1, 2) = "Change"
        .Offset(0, 3).End(xlUp).Offset(1, 0) = WorksheetFunction.Max(Range(.Offset(0, 0), .Offset(0, 2).End(xlUp).Offset(0, -2)))
    End If
End With

您可以取消Generator功能。这里不需要它。附加行将最近添加的时间戳的分钟值与前一个值进行比较,如果其不同,即分钟更改,则它标记有助于计算 E 列中的最大值的行。


推荐阅读