2016-09-01 141 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