如何获取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?

当我将SUMPRODUCTjoinEvaluate并调整即:

 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