我正在尝试编写一个程序,该程序将使用定义为BREAK_A,BREAK_B和BREAK_C的变量之间的一系列单元格计算平均值 - 其中这些断点之间的范围将根据用户输入而变化 - 因此,计算平均值的范围会有所不同。
有一点需要注意,A1和A10永远不能成为断点的位置。
示例Excel电子表格:
A1 = 11
A2 = 24
A3 = 15
A4 = BREAK_C
A5 = 17
A6 = BREAK_B
A7 = 6
A8 = 33
A9 = BREAK_A
A10 = 12
尝试使用某些伪代码:
Public Sub Sort()
DIM BREAK_A AS NUM
DIM BREAK_B AS NUM
DIM BREAK_C AS NUM
DIM RANGE1 AS VARIANT
DIM RANGE2 AS VARIANT
DIM RANGE3 AS VARIANT
DIM FULL_RANGE AS VARIANT
FIND CELL NUMBERS OF(BREAK_A, BREAK_B, BREAK_C)
SORT CELL NUMBERS IN ASCENDING ORDER
RANGE1 = "A1: LOWEST CELL NUMBER OF BREAK"
RANGE2 = "LOWEST CELL NUMBER OF BREAK +1 : NEXT HIGHEST CELL NUMBER OF BREAK"
RANGE3 = "NEXT HIGHEST CELL NUMBER OF BREAK +1 : END"
我的问题是BREAK点会根据用户输入填充不同的单元格位置。我想编写一个程序来定义计算平均值的单元格范围 - 取决于断点的位置。
另外,有时BREAK可能不存在 - 所以我不能总是使用BREAK_A,BREAK_B,BREAK_C作为我的范围的终点,因为您可能会遇到仅应考虑BREAK_A和BREAK_C且BREAK_B不存在的情况。
对于这个例子,我想进行计算= AVG(A1:A3,A5,A7:A8,A10)
非常感谢任何帮助产生想法。我是VBA的新手,现在已经能够解决这个问题几天了..
答案 0 :(得分:0)
您可以尝试以下代码
Sub Test()
lstrng = ActiveSheet.Range("A65000").End(xlUp).Row
Startrng = 1
For i = 1 To lstrng
If Range("A" & i).Value = "Break" Then
Endrng = i - 1
Range("A" & i).Value = WorksheetFunction.Average(Range(Cells(Startrng, 1), Cells(Endrng, 1)))
Startrng = i + 1
End If
Next
End Sub