【问题标题】:Excel VBA code for SumIF functionSumIF 函数的 Excel VBA 代码
【发布时间】:2014-05-13 18:44:11
【问题描述】:

嗨,我正在编写这样的 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 传递并添加通配符 (**)

感谢任何帮助。 提前致谢

【问题讨论】:

  • 您遇到错误了吗?我很确定如果要包含双引号,则需要三个双引号,例如“””。话虽如此,我认为您最好放弃 SUMIF 公式并遍历行并使用If...Then 语句。
  • 没有错误...但单元格 N1 中没有设置任何内容。我确定这是因为匹配标准不正确。我只是想避免传统的循环方法,这更容易,但仍然是我的备份选项
  • 另外,你想要在通配符前后有一个空格吗?试试这个:"""" & temp & """"
  • 评论中似乎没有正确显示,我会在答案中添加它。

标签: vba excel sumifs


【解决方案1】:

这应该可以满足您的需求,除非您要寻找的不仅仅是寻找基本的子字符串:

Private Sub FindTotal()

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

End Sub

【讨论】:

    【解决方案2】:

    这就是我所说的三引号:

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

    【讨论】:

    • 啊……这行得通。想知道我错过了什么,三引号是诀窍。非常感谢
    【解决方案3】:

    对于循环的概念,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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2015-01-03
      • 1970-01-01
      相关资源
      最近更新 更多