2

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

任何帮助表示赞赏。提前致谢

4

3 回答 3

6

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

Private Sub FindTotal()

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

End Sub
于 2014-05-13T19:05:26.953 回答
2

这就是我所说的三引号:

SumIf(Range("D1:D20"), """*" & temp & "*""", Range("C1:C20"))
于 2014-05-13T19:03:12.463 回答
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
于 2014-12-08T01:40:18.943 回答