Я пытаюсь использовать функцию 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)
TickerD2, transaction и valeurflux являются диапазонами в другом листе. Я пытаюсь вставить TickerD2.Address в формулу, но это не работает, потому что это просто дает мне $ D: $ D (без листа, чтобы найти его). – Florian
Используйте 'TickerD2.Address (external: = true)', чтобы получить полный путь и имя рабочего листа. Это нормально, чтобы дать слишком много информации, как полный путь, но никогда не делать этого достаточно. – Jeeped
Кстати, вы действительно не должны использовать полные ссылки на колонки в функции [SUMPRODUCT] (https://support.office.com/en-us/article/sumproduct-function-4e0bffa7-4291-4635-a61f-6aaa9399e7ff) , Существуют способы сократить диапазоны до минимума, требуемого динамическими именованными диапазонами. – Jeeped