findselect的平均值,然后将其分配给一个单元格

我试图创build一些dynamic代码,在这一点上,将select一堆单元格,将select移动到两列,然后find该select的平均值并将该值发送到单元格。 这是我迄今为止,我被平均我所做的select卡住:

Sub StatMakersub(Rng1 As Range) Dim MyRange As Range Dim Cell As Object Dim InQuestion As Range Dim SelAvg As Object 'Check every cell in the range for matching criteria. For Each Cell In Rng1 If Cell.Value = 2000 Then If MyRange Is Nothing Then Set MyRange = Range(Cell.Address) Else Set MyRange = Union(MyRange, Range(Cell.Address)) End If End If Next 'Select the new range of only matching criteria MyRange.Select Selection.Offset(0, 2).Select Set InQuestion = Selection Range("P2").Formula = "=Average(Selection)" Range("Q2").Formula = "=STDDEVA(Selection)" End Sub 

网上找不到如何平均范围variables。

你可以用这种方式计算select的平均值:

 Application.WorksheetFunction.Average("Here you put your range") 

结果是一个值而不是一个对象,所以你应该使用一个variables。 从你的案例中取名,你应该像这样使用它:

 SelAvgResult = Application.WorksheetFunction.Average(InQuestion) 

我为variables添加了另外一个名字,但是如果你喜欢的话,你仍然可以使用SelAvg。 只要提醒将其定义为一个variables(您可以根据数据大小select所需的格式)而不是对象(如果不再需要)。

你可以使用这个variables来设置你想要的单元格的值。

我有最后一个注意:你的代码似乎复制已经存在的公式AVERAGEIF。 如果您的条件列是例如列A,并且您应该使用计算平均值的值在列C中,则可以直接设置您希望平均值的单元格的值,如下所示:

 =AVERAGEIF(A:A, "2000", C:C) 

在这种情况下,你会避免VBA。

您是否尝试过使用Sum工作表函数来计算范围的总和?

Xsum = WorksheetFunction.Sum(arrayX)

并将Xsum的值除以数组的长度?

我应该提到的一件事是,你不需要select范围来处理它。 你可以直接使用它,这样做也可以提高代码的运行速度。

若要插入您的工作表函数,使用Range.Address函数生成一个单元格引用放入公式。

https://msdn.microsoft.com/en-us/library/office/ff837625.aspx