使用低于平均值的值填充数组并计算方差
问题描述:
我试图从数据的一维范围中选择那些低于平均值的值。使用低于平均值的值填充数组并计算方差
此代码是否正确?我想有一个与我怎么把它们放入数组BelowAvg一个问题...
Function MoyBelow(data As Range) As Variant
Dim i As Integer
Dim N As Long
Redim BelowAvg() As Variant
Dim Varian As Double
Dim Somcar() As Variant
N=WorksheetFunction.Count(data)
RendMoy=WorksheetFunction.Average(data)
For i=1 To N
If data.Cells(i).Value < RendMoy Then
BelowAvg(i).Value = data(i).Value
End If
NB = BelowAvg.Count
For j=1 To NB
SumSq= SumSq + (BelowAvg(i) - RendMoy)^2
Next j
Next i
Varian = SumSq/NB
End Function
答
下面是返回双打的数组,其中包含了低于平均水平的细胞在范围内的功能:
Function GetBelowAverageValues(data As Range,RangeAverage As Double) As Double()
Dim FilteredRangeValues As Variant
Dim BelowAverageValuesCount As Long
Dim BelowAverageValues() As Double
Dim i As Long
If data.Cells.Count = 1 Then
MsgBox "only one cell"
Exit Sub
End If
data.AutoFilter 1, "<" & RangeAverage
FilteredRangeValues = data.SpecialCells(xlCellTypeVisible)
BelowAverageValuesCount = UBound(FilteredRangeValues)
ReDim BelowAverageValues(1 To BelowAverageValuesCount)
For i = 1 To BelowAverageValuesCount
BelowAverageValues(i) = FilteredRangeValues(i, 1)
Next i
GetBelowAverageValues = BelowAverageValues
data.AutoFilter
End Function
它使用AutoFilter
函数和SpecialCells属性来过滤和选择相关的单元格。对于你的用途,你可以这样称呼它:
Sub Test()
Dim DataRange as Range
Dim RangeAverage As Double
Dim BelowAverageValues() As Double
Dim i as Long
Dim Varian As Double
Set DataRange = Selection
RangeAverage = Application.WorksheetFunction.Average(DataRange)
BelowAverageValues = GetBelowAverageValues(DataRange ,RangeAverage)
For i=1 To Ubound(BelowAverageValues)
SumSq= SumSq + (BelowAverageValues(i) - RendMoy)^2
Next i
Varian = SumSq/NB
End Sub
这是主要测试,但可能有错误的地方。主要功能已经过测试和为我工作。
谢谢,它解决了我的问题! – seigna 2013-05-05 13:20:03
我很高兴能帮上忙。请接受它,因为它回答了问题。 – 2013-05-05 14:32:19