具有动态范围的VBA中的AverageIF

时间:2018-06-13 19:06:19

标签: excel vba excel-vba excel-formula

我有一个VBA代码,可以创建一个数据透视表,然后根据动态范围找到平均值(因为数据透视表的大小总是在变化)

我想使用AVERAGEIF函数而不是平均值,以便我可以平均所有值"> 0"。我遇到的问题是Excel不允许在引号内引用,因此我无法将标准放在"> 0"在功能中。我目前的代码是:

Sub BuildLaborTable()
'
'This procedure builds the labor table and finds the average of the rows

ActiveWorkbook.ShowPivotTableFieldList = True
With ActiveSheet.PivotTables("Pivot ZP2P").PivotFields("Notif Service product")
    .Orientation = xlRowField
    .Position = 1
End With

ActiveSheet.PivotTables("Pivot ZP2P").AddDataField ActiveSheet.PivotTables( _
    "Pivot ZP2P").PivotFields("Actual Qty"), "Sum of Actual Qty", xlSum

With ActiveSheet.PivotTables("Pivot ZP2P").PivotFields("Notifctn")
    .Orientation = xlColumnField
    .Position = 1
End With                     

Range("A6").Select
Selection.End(xlToRight).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "Average"
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "Median"
ActiveCell.Offset(1, -1).Select
ActiveCell.FormulaR1C1 = "=AVERAGE(RC2:RC[-2])"

End Sub

我想使用公式AVERAGEIF(RC2:RC [-2],"> 0"),但问题是这需要引号内的引号是不允许的。

2 个答案:

答案 0 :(得分:2)

您可以将引号加倍以在VBA中使用。作为旁注,你可以将很多行放在一起,以避免一直使用select

With Range("A6").End(xlToRight)
    .Offset(0, 1).Value = "Average"
    .Offset(0, 2).Value = "Median"
    .Offset(1, 1).FormulaR1C1 = "=AVERAGEIF(RC2:RC[-2],"">0"")"
End With

答案 1 :(得分:1)

在VBA中的公式中使用引号时,只需“加倍”:

ActiveCell.FormulaR1C1 = "=AVERAGEIF(RC2:RC[-2],"">0"")"