【问题标题】:Populate multiple cells within a summary sheet using SumIf使用 SumIf 在汇总表中填充多个单元格
【发布时间】:2022-09-29 13:13:53
【问题描述】:

我正在尝试使用 VBA 中的 SUMIF 公式填充汇总表中的多个单元格。

我有两张纸——摘要和 CPTView。
我希望单元格 C7 填充 SumIf 公式的结果。我希望它在 CPTView A:A 中查找匹配摘要单元格 C4 和总和 CPTView C:C 的日期。

我想避免使用 Application.WorksheetFunction 因为我希望这个单元格在数据更改时重新计算。

Private Sub summarypage()

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(\"Summary\")

Dim cptrng As Range
Dim sumrng As Range
Dim cpt As String

Set cptrng = Sheets(\"CPTView\").Range(\"A1:A1000\")
Set sumrng = Sheets(\"CPTView\").Range(\"C1:C1000\")
cpt = ws.Range(\"C4\").Value

ws.Range(\"C7\").Formula = \"=SumIf(cptrng, cpt, sumrng)\"

End Sub

我把上面改成

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(\"Summary\")

Dim cptrng As Range
Dim sumrng As Range
Dim cpt As String

Set cptrng = Sheets(\"CPTView\").Range(\"A1:A1000\")
Set sumrng = Sheets(\"CPTView\").Range(\"C1:C1000\")
cpt = ws.Range(\"C4\").Value

ws.Range(\"C7\").Formula = \"=SumIf(\" & cptrng & \", \" & cpt & \", \" & sumrng & \")\"

该公式显示了所有正确的单元格和范围,但我现在收到类型不匹配错误。
我认为这是因为日期格式不匹配。标准日期显示为 \"mm/dd/yyyy\",但范围显示日期为 \"mm/dd/yyyy h:mm\"。

  • cptrng 和 sumrng 是范围,当您在\"=SumIf(\" & cptrng & \", \" & cpt & \", \" & sumrng & \")\" 中使用它们时,它们现在与字符串等效,您希望该公式是什么,是=SumIf( a1:A1000, C4, C1:c1000,如果是的话,您使用 VBA 的目的是什么?除了将其粘贴到单元格C7 之外,您还想达到什么目的?如果那不是您想要的公式,您能否详细说明您想要什么?
  • 看起来您的原始问题已得到解答,并且您现在有一个单独的问题,那么您应该发布一个与该问题相关的新问题。在您这样做之前,进行一些研究,如果您遇到困难,请展示您尝试过的事情以及单元格值、结果和预期结果的示例。尝试通过公式将日期与日期时间值分开,然后将其添加到您的 vba 生成的公式中。不确定这将如何在范围内工作,但我认为单个单元格将是 =int(a1) 或您想要引用的任何单元格。
  • 而不是使用cptrng 构建字符串,您可以使用cptrng.address(相应更新答案)

标签: excel vba


【解决方案1】:

用 VBA 写一个 SUMIF 公式

Sub SumIfFormula()

    ' Source
    Const sName As String = "CPTView"
    Const slAddr As String = "A1:A1000" ' Lookup
    Const ssAddr As String = "C1:C1000" ' Sum
    ' Destination
    Const dName As String = "Summary"
    Const dlAddr As String = "C4" ' Lookup
    Const dsAddr As String = "C7" ' Sum
    
    Dim Formula As String: Formula = "=SUMIF('" & sName & "'!" & slAddr & "," _
        & dlAddr & "," & "'" & sName & "'!" & ssAddr & ")"
    'Debug.Print Formula
    
    ThisWorkbook.Worksheets(dName).Range(dsAddr).Formula = Formula

End Sub

【讨论】:

    【解决方案2】:

    您需要从文本和变量的组合中构建公式字符串。

    相反,您实际上是在插入这个公式:

    =SumIf(cptrng, cpt, sumrng)
    

    要获得您想要的效果,您有两种选择:

    选项1

    在这一行中即时构建它:

    ws.Range("C7").Formula = "=SumIf(cptrng, cpt, sumrng)"
    

    通过将其替换为:

    ws.Range("C7").Formula = "=SumIf(" & cptrng.address & ", " & cpt & ", " & sumrng.address & ")"
    

    选项 2

    首先构建一个公式变量,然后将公式设置为该变量。

    【讨论】:

    • 同意,一般来说,但 cptrngsumrng 是范围而不是字符串
    • 相应更新
    猜你喜欢
    • 2018-01-26
    • 2011-03-14
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2011-03-15
    • 2015-09-13
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多