2016-02-23 49 views
0

我试图在vba中使用Sumproduct函数。 首先我想这:Sumprod评估给出名称vba

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

哪里交易,TickerD2和ValeurFlux是相同lenght的范围(这是一整列)。 我在许多论坛上看到,在有标准的情况下,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) 

回答

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) 

我觉得更容易建立在分配给一个字符串类型变种片长字符串,然后用在Application Evaluate的变种。

+0

TickerD2,交易和valeurflux是在另一个表中的范围。我尝试在公式中插入TickerD2.Address,但它不起作用,因为它只是给我$ D:$ D(没有表单来查找它) – Florian

+0

使用'TickerD2.Address(external:= true)'获取完整路径和工作表名称。给予太多的信息,如完整的道路是可以的,但永远不会放弃。 – Jeeped

+0

顺便说一句,你真的不应该在[SUMPRODUCT函数]中使用完整的列引用(https://support.office.com/en-us/article/sumproduct-function-4e0bffa7-4291-4635-a61f-6aaa9399e7ff) 。有多种方法可将范围降低到动态命名范围所需的最小范围。 – Jeeped