我有一个Excel电子表格,可以包含10到200行的任何内容。我想循环遍历范围的所有组合(三行或更多行),以找到产生最高平均值的行范围。
例如,如果我的行是:
12
1
4
18个
9
3
...然后从A1:A3开始,然后是A1:A4到A1:A6,然后继续前进到A2:A4,然后是A2:A5,依此类推,直到三行范围的所有组合或更多已被平均。我想要突出显示,甚至是MsgBox,平均值最高的范围。
我知道这相对简单,但这真的让我头疼。获胜者'在上面的场景中,A3:A5为10.333,但我会强调该范围 为3行。
答案 0 :(得分:2)
这样做:
Sub bp()
Dim avg As Double
Dim rng As Range
Dim ws As Worksheet
Dim i&, t&
Dim avgAdd As String
Set ws = ActiveSheet
With ws
Set rng = .Range(.Cells(1, 1), .Cells(1, 1).End(xlDown))
For i = 1 To rng.Rows.count - 2
For t = i + 2 To rng.Rows.count
If WorksheetFunction.Average(.Range(.Cells(i, 1), .Cells(t, 1))) > avg Then
avg = WorksheetFunction.Average(.Range(.Cells(i, 1), .Cells(t, 1)))
avgAdd = .Range(.Cells(i, 1), .Cells(t, 1)).Address
End If
Next
Next
MsgBox avgAdd & ":" & avg
End With
End Sub
每次平均值较大时,我都会添加一个调试打印。