2016-09-01 4 views
2

Я новичок в Excel. Мне нужно оценить Sum-продукт в VBA Excel.Sumproduct для оценки в VBA Excel

Вот мой рабочий лист:.

enter image description here

  • Cell D4 содержит определенную дату (выделены желтым цветом)
  • Cell D6 содержит новый введенный Date (выделено красным цветом)
  • Колонка C содержит Легенда (Подсвеченный розовый)
  • Колонка J Содержит месяц. (Выделено зеленым)
  • Столбец K содержит легенду об этой конкретной сделке. (Выделено Orange)
  • Колонка I содержит значения, которые будут суммированные (Выделено синий)
  • Колонка D9 года покажет результат суммарного продукта (Выделено Gray)

То, что я пытаюсь сделать, это что:

Я бы ввел дату в ячейке № D6, которая должна будет суммировать столбец I с помощью соответствующего месяца столбца J с ячейкой D6, и если совпадающий, то он будет соответствовать легенде столбца K с буквой легенды в столбце C и если после этого будет соответствовать снова, он суммирует столбец I и покажет его значение в столбце D9 и далее.

Это формула, которую я использовал, и она работала без VBA.

SUMPRODUCT((MONTH($J$9:$J$12000)=MONTH($D$6))*($K$9:$K$12000=C10)*($I$9:$I$12000)) 

Назначение использования VBA - использовать While Loop. Когда я вводю дату в D6 в течение определенного месяца, тогда она должна увеличивать или уменьшать месяц и добавлять их до другой указанной даты ячейки D4 (выделено желтым цветом).

Но когда я использую указанную формулу, она возвращает #Value.

Sub Sub1() 
Dim a, b, c As Integer 
a = Sheet20.Cells(6, 4) 
b = 4 
c = 10 
Do While a >= Cells(4, 4) 
Sheet20.Cells(c, b).Value = Evaluate(" (SumProduct((Month(Sheet20.Range(J9:J12000)) = Month(Cells(6, 4))) * (Sheet20.Range(K9:K12000) = Cells(c, 3)) * (Sheet20.Range(I9:I12000)))") 
a = a - 1 
Loop 
End Sub 

Правильно ли вы выбрали диапазон?

ответ

0

Я добавил правильную ссылку на рабочий лист, который вы используете. В VBA вам нужно сначала указать, что «Sheet20» - это рабочий лист.

Таким образом, я заменил «Sheet20» на Worksheets("Worksheet20"), тем самым давая понять, что он является частью коллекции рабочих листов.

Sub Sub1() 
Dim a, b, c As Integer 
a = Worksheets("Sheet20").Cells(6, 4) 
b = 4 
c = 10 
Do While a >= Cells(4, 4) 
Worksheets("Sheet20").Cells(c, b).Value = Evaluate(" (SumProduct((Month(Sheet20.Range(J9:J12000)) = Month(Cells(6, 4))) * (Sheet20.Range(K9:K12000) = Cells(c, 3)) * (Sheet20.Range(I9:I12000)))") 
a = a - 1 
Loop 
End Sub 
Смежные вопросы