首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得WorksheetFunction.SumProduct()值以匹配=SUMPRODUCT()?

如何获得WorksheetFunction.SumProduct()值以匹配=SUMPRODUCT()?
EN

Stack Overflow用户
提问于 2015-02-23 07:03:08
回答 1查看 1.2K关注 0票数 2

我试图使用SUMPRODUCT来确定一个范围内的所有非空白值是否都是相同的。我能够使用this answer将其作为一个Excel公式工作,现在我希望通过使用WorksheetFunction.SumProduct()在VBA中获得结果。

我尝试了以下几点:

代码语言:javascript
复制
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(),而是使用:

代码语言:javascript
复制
WorksheetFunction.sumProduct(sumProductString)

然后我得到了这个错误:

代码语言:javascript
复制
Unable to get the SumProduct property of the WorksheetFunction class

如何在VBA中实现此功能?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 08:02:38

当我将SUMPRODUCT添加到Evaluate并调整(即:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28668447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档