vba工作表函数的sumifs其中条件范围在sheet1和条件在sheet2

我正在尝试使用工作表函数sumifs的vba代码。 我有两张工作表,工作表1包含标准范围,工作表2包含标准。

第1页:

Group Year Cutomer Amount A 2012 Gold 1000 B 2013 Platinum 1250 C 2012 Gold 1500 B 2012 Platinum 1750 C 2013 Gold 2000 A 2013 Platinum 2250 C 2012 Gold 2500 A 2013 Platinum 2750 B 2012 Gold 3000 Sheet 2: 2012 2013 A Gold A Platinum B Gold B Platinum C Gold C Platinum 

我的代码如下:

 Sub SUMIFSTWOSHEETS() Dim i As Variant Dim condition As Range For i = 2 To 7 sheet2.Cells(i, 3) = WorksheetFunction.sumifs(sheet1.Range("d2:d10"), sheet1.Range("a2:a10"), sheet2.Cells(i, 1), sheet1.Range("c2:c10"), sheet2.Cells(i, 2), sheet1.Range("B2:B10"), sheet2.Range("c2")) sheet2.Cells(i, 4) = WorksheetFunction.sumifs(sheet1.Range("d2:d10"), sheet1.Range("a2:a10"), sheet2.Cells(i, 1), sheet1.Range("c2:c10"), sheet2.Cells(i, 2), sheet1.Range("B2:B10"), sheet2.Range("d2")) Next i End Sub 

有了上面的代码,vba正在运行,但它只给出零作为答案。

我的回答如下:

  2012 2013 A Gold 0 0 A Platinum 0 0 B Gold 0 0 B Platinum 0 0 C Gold 0 0 C Platinum 0 0 

有人能帮我吗?

如果我正确理解了标签的位置,请尝试用sheet2.Range("c2") sheet2.Range("c1")sheet2.Range("d2")replacesheet2.Range("d1") sheet2.Range("d2")sheet2.Range("d1") 。 它应该给你在Sheet2的以下输出:

  2012 2013 A Gold 1000 0 A Platinum 0 5000 B Gold 3000 0 B Platinum 1750 1250 C Gold 4000 2000 C Platinum 0 0 

作为一个侧面说明,我不知道为什么你需要iVariant :一个简单的Long应该可以吗?

您正在求和的值应该是最后一个参数。 从而,

 sheet2.Cells(i, 3) = WorksheetFunction.sumifs(sheet1.Range("a2:a10"), sheet2.Cells(i, 1), sheet1.Range("c2:c10"), sheet2.Cells(i, 2), sheet1.Range("B2:B10"), sheet2.Range("c2"), sheet1.Range("d2:d10")) 

我的问题是为什么你需要一个macros而不是只把公式放在Excel中。