更改单元格引用的 VBA 到 FillDown 公式

Posted

技术标签:

【中文标题】更改单元格引用的 VBA 到 FillDown 公式【英文标题】:VBA to FillDown Formula with changing cell reference 【发布时间】:2017-01-25 04:59:22 【问题描述】:

我有一个 Sumifs 函数要在具有 2 个标准的宏中完成。我的excel文件很大。所以我的代码看起来像这样:

Sub SumIfs()
ThisWorkbook.Sheets("Sheet1").Activate
Range("L2") = Application.WorksheetFunction.SUMifs(Range("G:G"),Range("A:A"),"Pen",Range("F:F"),"John")
End Sub

但我想将“Pen”更改为其单元格引用,这意味着“A2”和“John”对于 F:F 范围内的所有单元格保持不变。并为下面的所有单元格填写公式。我用了这段代码,

Application.WorksheetFunction.SUMifs(Range("G:G"),Range("A:A"), A2,Range("F:F"),"John")

但它只在我执行填充功能时在单元格中显示 A2 向下的值。请帮我解决一下这个。提前致谢。

【问题讨论】:

您没有在单元格中放置公式,而只是一个值。如果要填写,则需要使用实际公式。 @TimWilliams,感谢您的回复,我已尝试将 Sub Sumifsfunction() 与 ThisWorkbook.Sheets("Sheet1") Range("L2:L100").Formula = "=SUMifs(G :G,A:A,E2,F:F,"John")" End With End Sub 但得到预期:语句结束错误 您没有在该字符串中使用双引号。 (而且你有一个 With 块,但没有将它用于任何事情。)你可以使用 .Range("L2:L100").Formula = "=SUMifs(G:G,A:A,A2,F:F,""John"")" @YowE3K ,是的,那是我的代码的问题,你的代码帮助我解决了这个问题,谢谢队友 :) 【参考方案1】:

听起来你在追求类似的东西:

Sub SumIfs()
    With ThisWorkbook.Sheets("Sheet1")
        .Range("L2:L" & .Range("G" & .Rows.Count).End(xlUp).Row).Formula = _
                    "=SUMIFS(G:G,A:A,A2,F:F,""John"")"
    End With
End Sub

如果您希望将 而不是 公式 插入到 L 列中,您可以将该代码扩展为:

Sub SumIfs()
    Dim LastRow As Long
    With ThisWorkbook.Sheets("Sheet1")
        'Assume we want to create values for every cell in column L down until
        'we get to the last cell in column G
        LastRow = .Range("G" & .Rows.Count).End(xlUp).Row
        'Paste the formula
        .Range("L2:L" & LastRow).Formula = _
                    "=SUMIFS(G:G,A:A,A2,F:F,""John"")"
        'Convert to values
        .Range("L2:L" & LastRow).Value = _
                   .Range("L2:L" & LastRow).Value
    End With
End Sub

【讨论】:

非常感谢您提供的第一个代码完全符合我的要求,非常感谢:)

以上是关于更改单元格引用的 VBA 到 FillDown 公式的主要内容,如果未能解决你的问题,请参考以下文章

VBA 自动填充 - 单元格引用变量

具有变化范围的自动填充/填充公式

VBA中如何引用另一工作表中的单元格区域

当另一个框在excel(VBA)中具有特定值时,如何引用msgBox中的单元格。

[Excel VBA]单元格区域引用方式的小结

在excel里利用vba怎么对指定单元格,或区域单元格保护