VBA Excel Sumif 和 sumifs 函数

问题描述 投票:0回答:2

销售详情

金额
一月 120
三月 250
四月 380
六月 510
一月 640
三月 770
四月 900
六月 1030
一月 1160
三月 1290
四月 1420
一月 1550

注意:所有vba代码都写在下面.........

Sub sum_if_Function()

Dim i As Long
Dim j As Long

'Note:rng means range**
Dim rng1(4 To 15) As Variant
Dim rng2(4 To 15) As Long
Dim Result As Long

'Note: This below code write for store all Month Name**
For i = 4 To 15
  rng1(i) = Cells(i, 3).Value
Next i

'Note: This below code write for store all Each Month Sale Amount**
For j = 4 To 15
  rng2(j) = Cells(i, 4).Value
Next j

'Note: This below code write for display January month total sales**
For i = 4 To 15
  Result = Application.WorksheetFunction.SumIf(rng1(i), "January", rng2(i))
Next i

MsgBox "January Month Total Sales Amount:-" & Result

End Sub

这是我的VBA代码,我试图获得一月份的总销售额,但是当我运行此代码时,vba excel编译显示为按摩...运行时错误“424”需要对象

我也尝试使用二维数组来获得这个结果,但我失败了

我需要使用数组的良好且简单的代码,以便我可以获得结果并且还需要建议

excel vba excel-2010 vba7 vba6
2个回答
0
投票

您必须将范围传递给

SumIf
- 而不是数组中的 values

试试这个:

Sub sum_if_Function()
Dim rgMonths As Range
Set rgMonths = ActiveSheet.Range("C4:C15")

Dim rgAmount As Range
Set rgAmount = ActiveSheet.Range("D4:D15")

Dim result As Single
result = Application.WorksheetFunction.sumIF(rgMonths, "January", rgAmount)

MsgBox "January Month Total Sales Amount:-" & result
End Sub

0
投票

如果您的原始数据在工作表中,首选版本是使用@Ike建议的

SumIF
函数。
但是,如果您的原始数据不是来自工作表,您可以采用如下所示的另一种变体(我使用了@Ike的答案中的模板)。

Sub Sum_by_months()
    Dim rgMonths As Variant
    rgMonths = ActiveSheet.Range("C4:C15").Value

    Dim rgAmount As Variant
    rgAmount = ActiveSheet.Range("D4:D15").Value

    Dim result As Variant
    With Application  ' not .WorksheetFunction
        result = .SumProduct(.IfError(.Match(rgMonths, Array("January"), 0), 0), rgAmount)
    End With
    MsgBox "January Month Total Sales Amount: " & result
End Sub

小心。不要使用

WorksheetFunction
对象,月份名称必须是数组。

© www.soinside.com 2019 - 2024. All rights reserved.