我正在尝试创建一些动态代码,此时,将选择一堆单元格,将选择移动到两列,然后找到该选择的平均值并将该值发送到单元格。这就是我到目前为止所做的事情,我一直在努力平均我所做的选择:
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
我在网上找不到关于如何平均范围变量的信息。
答案 0 :(得分:1)
您可以通过以下方式计算选择的平均值:
Application.WorksheetFunction.Average("Here you put your range")
结果是值而不是对象,因此您应该使用变量。从你的案例中取名,你应该这样使用它:
SelAvgResult = Application.WorksheetFunction.Average(InQuestion)
我为变量添加了另一个名称,但如果您愿意,您仍可以使用SelAvg。只需提醒将其定义为变量(您可以根据数据大小选择所需的格式)而不是对象(如果您不再需要它)。
您可以使用此变量来设置所需单元格的值。
我有一个最后一点:您的代码似乎复制了现有的公式AVERAGEIF。如果您的条件列是例如A列和您应该用于计算平均值的值在C列中,您可以直接设置您想要平均值的单元格的值,如下所示:
=AVERAGEIF(A:A, "2000", C:C)
在这种情况下,你会避免使用VBA。
答案 1 :(得分:0)
您是否尝试过使用Sum工作表函数来计算范围之和?
Xsum = WorksheetFunction.Sum(arrayX)
并将Xsum值除以数组的长度?
答案 2 :(得分:0)
我应该注意的一件事是你不需要选择使用它的范围。您可以直接使用它,这样做也可以提高代码的运行速度。
要插入工作表函数,请使用Range.Address函数生成要放入公式的单元格引用。
https://msdn.microsoft.com/en-us/library/office/ff837625.aspx