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

How to find average of Excel column A if B(i) is TRUE and B(i-1) is FALSE?

我知道标题令人困惑,但要用一句话概括问题并非易事,请耐心等待。

我在 Excel 中有两列,A 列包含实数,B 列包含布尔值 TRUE 或 FALSE。我想获取 A 列中每个值的平均值,其中 B 中的相应单元格为 TRUE,上面的单元格为 FALSE。

基本上找到 colA 中所有数字的平均值,其中 [B(i) = TRUE & B(i-1) = FALSE]。

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

如果您的 Excel 版本是 2007 或更高版本,AVERAGEIFS function 应该可以轻松解决这个问题。

AVERAGEIFS(, , , , <标准2>…)

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

=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

Pre-conditions:

  • 您需要选择您的取值范围。
  • 确保您的选择上方有一行,以便偏移量正常工作
  • 添加条件以处理 nbr 等于零时

最终结果: