【问题标题】:Sumprod evaluate gives name vbaSumproduct 评估给出名称 vba
【发布时间】:2016-02-23 15:54:32
【问题描述】:

我正在尝试在 vba 中使用 Sumproduct 函数。 首先我尝试了这个:

   sht.Cells(LastRowsht + 1, 6) = Application.SUMPRODUCT((Transaction = "Vente") * (TickerD2 = sht.Cells(LastRowsht + 1, 2)), ValeurFlux))

其中 Transaction、TickerD2 和 ValeurFlux 是相同长度的范围。(它是一整列)。 我在许多论坛上看到,当有标准时,vba 中的 sumproduct 是有问题的。

人们建议使用 .Evaluate

   sht.Cells(LastRowsht + 1, 6) = Application.Evaluate("SOMMEPROD((Transaction = "Vente") * (TickerD2 = sht.Cells(LastRowsht + 1, 2)), ValeurFlux)")

但它给出了名字。 我使用 SOMMEPROD 因为我的 Excel 是法语的,所以我想我需要翻译。 我认为公式中存在拼写错误,但我不熟悉评估。

谢谢。


这是我在 excel 中使用的公式,它有效! 我不知道为什么在 vba 中它不能

   =SOMMEPROD((Data2!D:D="Achat")*(Data2!C:C=B8);Data2!I:I)

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我看到的两个主要问题是,在带引号的字符串中使用时必须加倍引号,并且您需要 sht.Cells(LastRowsht + 1, 2)Range.Address property,而不是 Range.Cells property 本身。

      Dim sumproductFormula As String
    
      sumproductFormula = "SUMPRODUCT((Transaction=""Vente"")*" & _
                                   "(TickerD2=" & sht.Cells(LastRowsht + 1, 2).Address & ")," & _
                                    "ValeurFlux)"
      sht.Cells(LastRowsht + 1, 6) = Application.Evaluate(sumproductFormula)
    

    我发现在分配给字符串类型 var 的片段中构建一个长字符串更容易,只需使用 Application Evaluate 中的 var。

    【讨论】:

    • TickerD2、transaction 和 valeurflux 是另一个工作表中的范围。我尝试在公式中插入 TickerD2.Address 但它不起作用,因为它只是给了我 $D:$D (没有工作表来定位它)
    • 使用TickerD2.Address(external:=true) 获取完整路径和工作表名称。提供太多信息(如完整路径)是可以的,但绝不可以不提供足够的信息。
    • 顺便说一句,你真的不应该在SUMPRODUCT function 中使用完整的列引用。有一些方法可以将范围缩减到动态命名范围所需的最小值。
    • 这适用于我的测试:` prod = "=SUMPRODUCT((Transaction=""Vente"")*" & _ "(TickerD2=" & sht.Cells(LastRowsht + 1, 2) .Address(external:=True) & ")," & _ "ValeurFlux)"` .在其正下方放置一个debug.print prod。还要记住,VBA 非常以 EN-US 为中心。我很确定公式必须是 EN-US 语言,而不是 FR-FR,但我不能 100% 确定 application.evaluate。
    • =SUMPRODUCT((Transaction.Address(external:=True)="Achat")*(TickerD2.Address(external:=True)=ARGENT),ValeurFlux.Address(external:=True) ) 这是我得到的 degu 打印。还是有错误
    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多