如果B(i)为真,B(i-1)为假,如何查找Excel列A的平均值?

如果B(i)为真,B(i-1)为假,如何查找Excel列A的平均值?,excel,average,conditional-statements,Excel,Average,Conditional Statements,我知道这个标题令人困惑,但要用一句话来概括这个问题可不是一件容易的事,所以请耐心听我说 Excel中有两列,A列包含实数,B列包含TRUE或FALSE布尔值。我想得到A列中每个值的平均值,其中B中对应的单元格为真,上面的单元格为假 基本上求colA中所有数字的平均值,其中[B(i)=真&B(i-1)=假] 当然,您会忽略colA&colB中的第一个值,因为没有什么可与之比较。如果您的Excel版本为2007或更新版本,则应轻松处理此问题 平均值(,…) 用于和一个或多个的范围的大小必须相同,但它

我知道这个标题令人困惑,但要用一句话来概括这个问题可不是一件容易的事,所以请耐心听我说

Excel中有两列,A列包含实数,B列包含TRUE或FALSE布尔值。我想得到A列中每个值的平均值,其中B中对应的单元格为真,上面的单元格为假

基本上求colA中所有数字的平均值,其中[B(i)=真&B(i-1)=假]

当然,您会忽略colA&colB中的第一个值,因为没有什么可与之比较。

如果您的Excel版本为2007或更新版本,则应轻松处理此问题

平均值(…)

用于和一个或多个的范围的大小必须相同,但它们不必是相同的行或列。如果从第二行开始计算平均范围和第一个标准范围,并将第二个标准范围向后偏移一行到第一行(同时保持相同的行数),则应该会收到所需的结果

=AVERAGEIFS(A2:A100, B2:B100, TRUE, B1:B99, FALSE)

您可以从以下代码开始:

Sub Average()
    Dim r As Range
    Dim sum As Double
    Dim nbr As Double
    Set r = Selection
    For Each cell In r.Cells
    If CBool(cell.Offset(0, 1).Value) And Not CBool(cell.Offset(-1, 1).Value) Then
    sum = sum + cell.Value
    nbr = nbr + 1
    End If
    Next
    av = sum / nbr
    MsgBox ("Your average is " & av)
    End Sub
先决条件:

  • 您需要选择您的值范围
  • 确保所选内容上方有一行,以便偏移功能正确运行
  • 添加一个条件以处理等于零的nbr
最终结果:


第一个值如何
(i=1)
,它算吗?