2016-09-01 138 views
2

我是Excel新手。我需要在VBA Excel中评估Sum-product。在VBA Excel中评估Sumproduct

这是我的工作。

enter image description here

  • 单元格D4包含特定日期(以黄色高亮显示)
  • 小区D6包含新输入的日期(红色高亮显示)
  • 列C包含传奇(突出显示粉色)
  • J列包含月。 (突出显示的绿色)
  • K列包含该特定事务的图例。 (显示为橙色)
  • I列包含要总和值(蓝色高亮显示)
  • 列D9起将展示和产品的结果(高亮灰)

我试图做的是:

我会在单元格#D6中输入一个日期,该日期将在列J与单元格D6的匹配月份的帮助下求和第I列,如果匹配,则它将在列C中将列K的图例与图例的图例相匹配,如果再次匹配,它将在列D9中向上求和列I和显示它的值。

这是我使用的公式,它在没有VBA的情况下工作。

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

使用VBA的目的是使用While循环。当我在D6中输入一个特定月份的日期时,它应该递增或递减Month并将它们添加到另一个指定的日期单元格D4(突出显示的黄色)。

但是,当我使用上述公式它返回#值。

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”是一个工作表。

因此,我用Worksheets("Worksheet20")替换了“Sheet20”,从而表明它是工作表集合的一部分。

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