Vba 在Excel中使用动态范围而不使用命名范围

Vba 在Excel中使用动态范围而不使用命名范围,vba,excel,Vba,Excel,我正在尝试编写一个宏,它将在工作表的整个长度上运行,并相应地进行计算 这是我为静态范围编写的代码: With .Range("P2:P" & LastRow) .Formula = "=SUMIF('Sheet2'!A$2:A$530,'Sheet1'!N2,'Sheet2'!B$2:B$530)" .Value = .Value Columns("P:P").Select Selection.NumberFormat = "0.00" End With

我正在尝试编写一个宏,它将在工作表的整个长度上运行,并相应地进行计算

这是我为静态范围编写的代码:

With .Range("P2:P" & LastRow)
    .Formula = "=SUMIF('Sheet2'!A$2:A$530,'Sheet1'!N2,'Sheet2'!B$2:B$530)"
    .Value = .Value
    Columns("P:P").Select
    Selection.NumberFormat = "0.00"
End With
我有一个基本的想法,我想在这里做什么,但因为我是新的VBA,我真的不知道怎么做

这是我正在尝试编写的当前代码:

 With .Range("P2:P" & LastRow)
        .Formula = "=SUMIF(Worksheets('Sheet2').Range("A2:A"& LR),'Sheet1'!N2,'Sheet2'!B$2:B$530)"
        .Value = .Value
        Columns("P:P").Select
        Selection.NumberFormat = "0.00"
    End With
然而,对于这一点,它不断地给我一个语句结束错误,我想修复它


另外,LastRow和LR分别包含两张工作表的最后一个单元格编号。

试试这个。在SUMIF的第一个部分,您的语法有点不正确,并且您正在硬编码最后的行号。也请注意,无需选择

With .Range("P2:P" & LastRow)
    .Formula = "=SUMIF(Sheet2!A$2:A$" & LR & ",'Sheet1'!N2,'Sheet2'!B$2:B" & LR & ")"
    .Value = .Value
    .NumberFormat = "0.00"
End With

删除SELECT时做得很好-您可能还可以删除
.Value=.Value
-这似乎不起作用much@dbmitch-用其结果替换实际公式(即仅相当于复制/粘贴特殊值)。