2016-02-23 2 views
0

Я пытаюсь использовать функцию Sumproduct в vba. Сначала я попытался это:Оценка Sumprod дает имя vba

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

Где Транзакция, TickerD2 и ValeurFlux диапазоны той же длины (это целая колонка).. Я видел на многих форумах, что sumproduct в vba проблематичен, когда есть критерии.

Люди предлагают использовать .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

Две основные проблемы, которые я видел, что вы должны удвоить кавычки при использовании в кавычках, и вы нуждались в Range.Address property из sht.Cells(LastRowsht + 1, 2), а не 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, transaction и 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

Смежные вопросы