Я создал программу, которая использует Excel Interop с VB.net для автоматической фильтрации большой таблицы для аналитики.Недавно я понял, что этого можно достичь с гораздо большей точностью и скоростью, используя встроенную в Excel функцию Sumproduct .Однако, хотя у меня был успех с этим в VBA, у меня были проблемы с выяснением, как перевести это в VB.net с Excel Interop.
Работа VBA :
Worksheets("Products").Range("A1").Formula = "=SUMPRODUCT(--('Fruit'!J:J=""" & "Apples" & """))"
Не работает VB.net : (Примечание: я хочу присвоить его переменной, а не применять формулу к ячейке, как указано выше.)
Product1 = WorksheetFunction.SumProduct(--(Worksheet.Range("J:J").EntireColumn.Value() = "Apple"))
Этот код выдает эту ошибку:
System.InvalidCastException: «Не удалось разрешить перегрузку, потому что ни один Public» = не может быть вызван с этими аргументами: «Public Shared Operator = (a As String, b As String)Как логическое значение: параметр сопоставления аргумента «a» не может преобразовать из «Object (,)» в «String». '
Однако я смог заставить это работать:
VBA :
Range("A1").formula = "=SUMPRODUCT(A:A,D:D)"
Переписано на VB.net :
WorksheetFunction.SumProduct(Worksheet.Range("A1").EntireColumn, objNewSheet.Range("D1").EntireColumn)
Я знаю, что мне не хватает чего-то очень "Базового" (каламбур), но я просто не могу понять, как передать Range и String через функцию Sumproduct вместо Range / Range.