2016-02-23 77 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