Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 带If条件的平均值_Vba_Excel_If Statement_Excel Formula_Average - Fatal编程技术网

Vba 带If条件的平均值

Vba 带If条件的平均值,vba,excel,if-statement,excel-formula,average,Vba,Excel,If Statement,Excel Formula,Average,我想计算E列中单元格的平均值,只计算I列中有0的行的平均值。它需要一个if条件,然后执行标准的平均代码行。。我提供了我编写的代码,用于计算E列中所有单元格的平均值。此代码需要编辑以包含此if条件。如果有人知道要添加什么,如果有这个条件,我将不胜感激 另外,我提供了一个截图 公式: =AVERAGEIF(I:I,0,E:E) 或在vba中: WorksheetFunction.AverageIf(范围(“I:I”)、0、范围(“E:E”))公式: =AVERAGEIF(I:I,0,E:E) 或在

我想计算E列中单元格的平均值,只计算I列中有0的行的平均值。它需要一个if条件,然后执行标准的平均代码行。。我提供了我编写的代码,用于计算E列中所有单元格的平均值。此代码需要编辑以包含此if条件。如果有人知道要添加什么,如果有这个条件,我将不胜感激

另外,我提供了一个截图

公式:

=AVERAGEIF(I:I,0,E:E)

或在vba中:

WorksheetFunction.AverageIf(范围(“I:I”)、0、范围(“E:E”))
公式:

=AVERAGEIF(I:I,0,E:E)

或在vba中:


工作表函数.AverageIf(Range(“I:I”)、0、Range(“E:E”))

据我所知,除非将excel函数设置为数组函数,否则无法使用excel函数执行此操作。数组函数功能强大,但计算速度可能非常慢。下面是一个使用VBA集合的VBA解决方案

你选择的答案肯定是获得答案的更有效的方法。但是,如果您希望以其他方式处理这些数字,因为它将这些数字放入一个集合中,那么这段代码可能会很有用

我创建了一个VBA集合,并将E中与D中的0值相对应的所有值添加到其中。然后我将其相加为一个名为
f
的变量,然后将其除以集合的计数。然后把它扔到你想要的范围内

Sub test()
Dim a As Collection
Dim lastrow As Integer

Set a = New Collection

lastrow = Cells(Rows.Count, "D").End(xlUp).Row

For x = 1 To lastrow
If Cells(x, 9) = 0 Then
y = Cells(x, 5).Value
a.Add (y)
End If
Next x



For Z = 1 To a.Count
f = a.Item(Z) + f
Next Z

Range("C1").Value = (f / a.Count)


End Sub

据我所知,除非将excel函数设置为数组函数,否则无法使用excel函数执行此操作。数组函数功能强大,但计算速度可能非常慢。下面是一个使用VBA集合的VBA解决方案

你选择的答案肯定是获得答案的更有效的方法。但是,如果您希望以其他方式处理这些数字,因为它将这些数字放入一个集合中,那么这段代码可能会很有用

我创建了一个VBA集合,并将E中与D中的0值相对应的所有值添加到其中。然后我将其相加为一个名为
f
的变量,然后将其除以集合的计数。然后把它扔到你想要的范围内

Sub test()
Dim a As Collection
Dim lastrow As Integer

Set a = New Collection

lastrow = Cells(Rows.Count, "D").End(xlUp).Row

For x = 1 To lastrow
If Cells(x, 9) = 0 Then
y = Cells(x, 5).Value
a.Add (y)
End If
Next x



For Z = 1 To a.Count
f = a.Item(Z) + f
Next Z

Range("C1").Value = (f / a.Count)


End Sub

你需要它把一个公式放在
范围(“C1”)
中吗?或者它能把一个值放进去吗?我只需要它来打印平均值。。然后我可以使用.value=.value并将其作为一个值。您需要它来将公式放入
范围(“C1”)
中吗?或者它可以在其中放入一个值吗?我只需要它来打印平均值。。然后我可以使用.value=.value并将其作为一个值