【问题标题】:Sum multiple columns based on references to multiple criteria - VBA not converting根据对多个条件的引用对多列求和 - VBA 不转换
【发布时间】:2017-07-18 22:03:07
【问题描述】:

我的代码是=SUMPRODUCT(H50:AA69*(H5:AA5=B10)*ISNUMBER(MATCH(F50:F69,K18:K24,0)))

其中 h50:aa69 是我的数据表,h5:aa5 是我的年份行(b10 是我用来过滤数据表的标准年份,将选择范围缩小到单列)。 F50:F69 是一列标识符,我的条件范围 K18:K24 将进一步从单列中过滤掉行。

我的公式在 Excel 中有效。我尝试将它翻译成 VBA,但我无法让它工作。有谁知道为什么?

Sheet72.Range("C22") = Application.WorksheetFunction.SumProduct((Sheet32. _
Range("h50:AA69")) * (Sheet32.Range("H5:AA5") = year) * _
Application.WorksheetFunction.IsNumber(Application.WorksheetFunction. _
Match(Sheet32.Range("f50:f69"), Sheet72.Range("K18:K24"), 0)))

【问题讨论】:

  • Sheet72. 应该是Sheet32.
  • 你的 match() 如果没有命中会导致运行时错误,所以用 isnumber() 检查返回值是行不通的。
  • @scottcraner 不,它是正确的。
  • @tim williams 你有什么推荐的?我不确定用另一个范围检查范围的任何其他方法。如果您有任何建议,请告诉我
  • 您可以使用 Worksheet.Evaluate() 方法来评估适用于工作表的现有公式。

标签: excel vba filter


【解决方案1】:

@Tim Williams 的意思(我认为)是您需要捕获Application.WorksheetFunction.Match 将失败的可能性,因为在Sheet72.Range("K18:K24") 上找不到匹配项,并且它将返回错误。

请参阅下面代码中添加的If 条件:

If Not IsError(Application.Match(Sheet32.Range("F50:F69"), Sheet72.Range("K18:K24"), 0)) Then
    Sheet72.Range("C22") = Application.WorksheetFunction.SumProduct((Sheet32.Range("h50:AA69")) * _
    (Sheet32.Range("H5:AA5") = Year) * _
    Application.WorksheetFunction.IsNumber(Application.WorksheetFunction. _
    Match(Sheet32.Range("f50:f69"), Sheet72.Range("K18:K24"), 0)))
Else
    MsgBox "Match failed"
End If

【讨论】:

    猜你喜欢
    • 2020-03-05
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 2022-01-12
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    相关资源
    最近更新 更多