2013-03-07 44 views
0

我之前从未使用过AVERGEIFS,对我而言它有点复杂,所以请帮助我。在Excel中创建AVERAGEIFS

我有一个范围,在这里我要平均在列A列值对具有列值B等于2点,并且列A的值大于3更低的行,所以这是正确的:

 
    WorksheetFunction.averageifs(columnA, columnA, "<3", columnB, "2") 

编辑 我得到一个“类型不匹配”

ColumnA和ColumnB的范围,在if语句,这是我想要的

IF columnA < 3 AND columnB = 2 Then Average(columnA) 

编辑

我假设这必须是与我的类型,然后,该AVERAGEIFS抛出,当我进入我的参数1004 cannot get the averageifs property of class worksheetfunction,但是COUNTIFS抛出13 Type Mismatch给予相同的参数:

For Each column In importsheet.UsedRange.Columns 
    colcount = .CountIfs(column, column, "<3", importsheet.UsedRange.Columns(DepColumn), sec) 
Next 

DepColumn和colcount是整数, sec是一个整数的字符串( “2”) clusterfuck上述错误,中风出来

+0

您将您的问题标记为'excel-vba' - 您是否试图访问VBA中的AVERAGEIFS公式,即使用'WorksheetFunction.Averageifs' - 或者您是否指向普通的Excel公式? – 2013-03-07 08:29:32

+0

@PeterAlbert谢谢澄清,我在谈论worksheetfunctions.averageifs – Jakob 2013-03-07 08:30:48

回答

2

的您发布的代码的语法是正确的在您的工作表提供

  • 你有Dim“编columnAcolumnB作为Range的和Set然后到有效范围
  • 数据返回结果(即至少有一行符合标准)

演示错误处理:

Sub Demo() 
    Dim columnA As Range 
    Dim columnB As Range 
    Dim v 
    Set columnA = [A:A] 
    Set columnB = [B:B] 

    On Error Resume Next 
    v = WorksheetFunction.AverageIfs(columnA, columnA, "<3", columnB, "2") 
    If Err.Number = 1004 Then 
     'No matching data 
     v = CVErr(xlErrNA) 
    End If 
    On Error GoTo 0 

End Sub 
+0

感谢您的意见。我似乎在每次运行中都有一个错误,并且countif返回一个类型不匹配,所以我怀疑它是不是没有得到任何结果? – Jakob 2013-03-07 10:03:31

+1

我建议你创建一个精简的测试例程来尝试并重现错误,并发布 – 2013-03-07 10:29:20

2

假设columnAcolumnB具有相同的尺寸的范围内,公式是正确的:

WorksheetFunction.Averageifs(Range("A:A"),Range("A:A"),"<3",Range("B:B"),"2") 

将返回塔A的平均,其中A < 3和B = 2。

+0

谢谢,我很高兴我说得对,除非我完全没有,我仍然得到Type MisMatch错误,虽然对我来说,看起来像正确的类型。 – Jakob 2013-03-07 10:01:25