双循环绝对值

我试图设置一个代码,当单元格的值比同一列中的前5个单元中的每一个都高时,显示一条消息。

这是我的代码:

Sub IncreasingFor_5Steps() Dim i, j As Integer For i = 7 To 20 For j = 1 To 5 If Cells(i, 5).Value > Cells(i - j, 5).Value Then Cells(i, 6) = "Increased for 5 steps" End If Next j Next i End Sub 

当我运行这个代码时,当单元格高于AT至less一个单元(在先前的5个单元上)时显示消息“增加5个步骤” ,但是我想只显示消息,如果单元格更高比以前的所有5个细胞,但我不知道该怎么做。

例如,在F7中显示消息,而E7低于E4,E20低于E19,但显示消息,因为E20高于E15,E16,E17,E18,但我不想:

在这里输入图像说明

像这样尝试,你需要一个布尔标志来绕过它:

 Sub IncreasingFor_5Steps() Dim i As Integer, j As Integer Dim flag As Boolean For i = 7 To 20 flag = False For j = 1 To 5 If Cells(i, 5).Value <= Cells(i - j, 5).Value Then flag = True End If Next j If Not flag Then Cells(i, 6) = "Increased for 5 steps" Next i End Sub 

布尔标志的想法是,它检查所有5个单元格是否较小,如果其中一个不小,则它变为true一旦为真, Cells(i,6)不增加。

在这里输入图像说明 你可以简单地用这个公式来做:

=IFERROR(IF(MAX(OFFSET(E1,-5,0))<E1,"Increased for 5 steps",""),"")

在VBA中这样做是必要的吗? 将这个公式放在F7中,然后拖下去工作?

 =IF(E7>MAX(E2:E6),"Increased for 5 steps","") 

如果你想使用VBA ,你可以使用WorksheetFunction.Max来获得一定范围内的最大值,从而不需要有2个For循环。

 Option Explicit Sub IncreasingFor_5Steps() Dim i As Long For i = 7 To 20 ' use WorkshettFunction Max instead of a 2nd loop If Cells(i, 5).Value > WorksheetFunction.Max(Range(Cells(i - 5, 5), Cells(i - 1, 5))) Then Cells(i, 6) = "Increased for 5 steps" End If Next i End Sub