我的代码是=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)))
答案 0 :(得分:0)
@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