#vba #mismatch #evaluate #sumproduct
#vba #несоответствие #оценить #sumproduct
Вопрос:
Я не уверен, в чем ошибка в этом коде, пожалуйста, сообщите, что я пытаюсь получить значение суммы с другого листа
For e = 8 To 120
'''----Item no--------'''
'''----Branch--------'''
'''----Trouser--------'''
Range("C" amp; e).Value = Round(Evaluate("SUMPRODUCT( --('1.Insert_Data'!F:F = '2.Counting_sheet'!A" amp; e amp; "),'1.Insert_Data'!E:E)"))
Range("T" amp; e).Value = Round(Evaluate("SUMPRODUCT( --('1.Insert_Data'!F:F = '2.Counting_sheet'!A" amp; e amp; "),('1.Insert_Data'!C:C = ""Branch""),'1.Insert_Data'!I:I)"))
Range("U" amp; e).Value = Round(Evaluate("SUMPRODUCT( --('1.Insert_Data'!F:F = '2.Counting_sheet'!A" amp; e amp; "),'1.Insert_Data'!J:J)"))
Range("V" amp; e).Value = Round(Evaluate("SUMPRODUCT( --('1.Insert_Data'!F:F = '2.Counting_sheet'!A" amp; e amp; "),'1.Insert_Data'!K:K)"))
Next e
End Sub
Комментарии:
1. Не уверен, как отладить эту проблему. Однако, поскольку я сам много занимался VBA, я не советую вам использовать функцию eval для таких сложных формул. Вам было бы лучше перебирать диапазон и умножать и суммировать с помощью VBA.
2. Есть ли
WorksheetFuction.SumProduct()
или только.Sum()
? Если есть, я предлагаю вам использовать это, в противном случае выполняйте вычисления в VBA по компонентам из массивов памяти. Например:arrayC = Range("C8").Resize(116,1).Value
3. Диапазон («T» и e). Значение = Приложение. WorksheetFunction.sumproduct((Листы(«1.Insert_Data»). Диапазон («F: F») = диапазон («A8»)), (Листы («1.Insert_Data»). Диапазон («C: C») = «Ветвь»), (Листы («1.Insert_Data»). Диапазон («I: I»))) — все еще несоответствие
4. В вашей исходной формуле условие для столбца C возвращает массив значений TRUE и / или FALSE, которые необходимо преобразовать в их числовой эквивалент, 1 и 0, соответственно, используя двойное отрицание. Попробуйте ` Range(«T» amp; e). Значение = Round(Оценить(«SUMPRODUCT( —(‘1.Insert_Data’!F:F = ‘2.Counting_sheet’! A» amp; e amp; «),—(‘1.Insert_Data’!C: C = «»Ветка»»),’1.Insert_Data’!I: I)»)) `.