我试图使用SUMPRODUCT来确定一个范围内的所有非空白值是否都是相同的。我能够使用this answer将其作为一个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当我使用所有非空白值相同的列进行测试时,sumProduct的值是1.63934426229508E-02,但是当我将sumProductString复制到工作表上的=SUMPRODUCT()公式中时,就得到了1的预期值。
如果我不使用Evaluate(),而是使用:
WorksheetFunction.sumProduct(sumProductString)然后我得到了这个错误:
Unable to get the SumProduct property of the WorksheetFunction class如何在VBA中实现此功能?
发布于 2015-02-23 08:02:38
当我将SUMPRODUCT添加到Evaluate并调整(即:
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 Functionhttps://stackoverflow.com/questions/28668447
复制相似问题