0

我正在尝试使用工作表函数 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

有人可以帮帮我吗?

4

3 回答 3

1

如果我正确理解您的标签位置,请尝试sheet2.Range("c2")sheet2.Range("c1")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应该可以吗?

于 2013-08-04T15:36:58.407 回答
1

您要求和的值应该是最后一个参数。因此,

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"))

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

于 2013-08-05T00:48:39.310 回答
0
Sub sumifs_worksheet()


Dim i As Variant
Dim condition As Range

For i = 2 To 8
'Sheet2.Cells(i, 3).Value = 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, 3).Value = WorksheetFunction.SumIfs(Sheet1.Range("d2:d8"), Sheet1.Range("a2:a8"), Sheet2.Cells(i, 1), Sheet1.Range("c2:c8"), Sheet2.Cells(i, 2), Sheet1.Range("B2:B8"), Sheet2.Cells(1, 3))
Sheet2.Cells(i, 4).Value = WorksheetFunction.SumIfs(Sheet1.Range("d2:d8"), Sheet1.Range("a2:a8"), Sheet2.Cells(i, 1), Sheet1.Range("c2:c8"), Sheet2.Cells(i, 2), Sheet1.Range("B2:B8"), Sheet2.Cells(1, 4))

Next i

End Sub
于 2020-10-09T09:00:52.027 回答