用于SumIF函数的Excel VBA代码

时间:2014-05-13 18:44:11

标签: vba excel-vba sumifs excel

您好我正在编写VBA代码 -

如果在范围D1:D20的任何单元格值中找到单元格M1的值,则在范围C1中找到相应单元格值的总和:C20。 但我对如何使用该函数并传递参数感到困惑。这就是我现在尝试过的,但它不起作用

Private Sub FindTotal()
    Dim Temp2Sheet As Worksheet

    Set Temp2Sheet = Sheets("Temp2")
    Temp2Sheet.Activate

    Dim temp As String
    temp = Temp2Sheet.Range("M1").Value
    Temp2Sheet.Range("N1").Value = Application.SumIf(Range("D1:D20"), "" * "&temp&" * "", Range("C1:C20"))

End Sub

我需要将Range M1的相同逻辑扩展到有多少值,而M列是动态的。总计将出现在列M的相应单元格的N列中。如M1总计将在N1中,依此类推

我的主要困惑是如何将temp变量作为SUMIF函数的参数2传递并添加通配符(**)

感谢任何帮助。 提前致谢

3 个答案:

答案 0 :(得分:5)

这应该做你想要的,除非你找的东西不仅仅是找到基本的子串:

Private Sub FindTotal()

    With Sheets("Temp2")
        .Range("N1").Value = Application.SumIf(.Range("D1:D20"), _
                              "*" & .Range("M1").Value & "*", _
                            .Range("C1:C20"))
    End With

End Sub

答案 1 :(得分:2)

这就是我所说的三重引号:

SumIf(Range("D1:D20"), """*" & temp & "*""", Range("C1:C20"))

答案 2 :(得分:0)

对于循环概念,Tim的代码可以修改为

Dim rowIndex As Long
Dim sourceWorksheet As Worksheet

For rowIndex = 2 To lastRow
 calcFormula = Application.SumIf(WorkSheet.Range("B:B"), _
                          "*" & Worksheet.Cells(rowIndex, "Q").Value & "*", _
                        WorkSheet.Range("L:L"))
        Worksheet.Cells(rowIndex, "AS").Value = calcFormula  ' output column
Next rowIndex