如何获取WorksheetFunction.SumProduct()值以匹配= SUMPRODUCT()?
我试图使用SUMPRODUCT来确定一个范围内的所有非空值是否相同。 我能够得到这个工作作为一个Excel公式使用这个答案 ,现在我想通过使用WorksheetFunction.SumProduct()
在VBA中获得结果。
我尝试了以下内容:
Public Function onlyOneValue(sheet As Worksheet) As Boolean Dim sumProduct As Variant Dim rng As Range Dim rngAddress As String Dim sumProductString As String Dim column As Long Set rng = sheet.Range(sheet.Cells(5,20), _ sheet.Cells(65,20)) rngAddress = rng.address sumProductString = "(" & rngAddress & "<>"""")/countif(" & _ rngAddress & "," & rngAddress & "&"""")" sumProduct = WorksheetFunction.sumProduct(Evaluate(sumProductString)) onlyOneValue = sumProduct = 1 End If End Function
当我testing所有非空值是一样的列时, sumProduct
的值是1.63934426229508E-02
,但是当我将sumProductString
复制到工作表上的=SUMPRODUCT()
公式中时,我得到的期望值为1
。
如果我不使用Evaluate()
,而是使用:
WorksheetFunction.sumProduct(sumProductString)
那么我得到这个错误:
Unable to get the SumProduct property of the WorksheetFunction class
我如何在VBA中实现这个function?
当我将SUMPRODUCT
joinEvaluate
并调整(即:
Public Function onlyOneValue(sheet As Worksheet) As Boolean Dim rng As Range Dim rngAddress As String Dim sumProductString As String Set rng = sheet.Range(sheet.Cells(5, 20), _ sheet.Cells(65, 20)) rngAddress = rng.Address sumProductString = "=SUMPRODUCT((" & rngAddress & "<>"""")/countif(" & _ rngAddress & "," & rngAddress & "&""""))" onlyOneValue = (CLng(Evaluate(sumProductString)) = 1) End Function