【问题标题】:Average with If conditionIf 条件下的平均值
【发布时间】:2018-02-10 21:28:54
【问题描述】:

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

另外,我提供了一个截图

lastrow = Cells(Rows.Count, "D").End(xlUp).Row
Range("C1").Formula = "=AVERAGE(E2:E" & lastrow & ")"

【问题讨论】:

  • 您需要它在Range("C1") 中放入公式还是在其中放入值?
  • 我只需要它来打印平均值。然后我可以使用 .value=.value 并将其作为值

标签: vba excel if-statement excel-formula average


【解决方案1】:

公式:

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

或在 vba 中:

WorksheetFunction.AverageIf(Range("I:I"), 0, Range("E:E"))

【讨论】:

    【解决方案2】:

    据我所知,除非您将其设为数组函数,否则您无法使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2016-05-28
      • 2012-02-29
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多