最简单的方法来做到这一点是
Set myrng1 = Range("B3:B" & LastRow)
不然,如果你想跟着你的方法,然后伯纳德所提到的,使用.Address
属性。
更改您的代码
或这里面做同样的事情。
Set myrng1 = Range("B3:" & _
Replace(Cells(LastRow, 2).Address, "$", "") _
)
而且我希望你已经宣布LastRow
为Long
,而不是作为Integer
,你可以在XL2007 +
最后一件事得到溢出错误。您的Cells
对象不完全合格,可能会导致错误。完全符合条件。例如(注意DOTS)
Set myrng1 = ThisWorkbook.Sheets("Sheet1").Range("B3:B" & LastRow)
或
With ThisWorkbook.Sheets("Sheet1")
Set myrng1 = .Range("B3:" & _
.Cells(LastRow, 2).Address(_
rowabsolute:=False, _
columnabsolute:=False) _
)
End With
编辑感谢PNUTS指出这
一旦你解决以上问题,你会面临更多的问题。例如"=SUMIF(myrng1,RC[-1],myrng2)"
。 "
之间的任何内容都将被视为字符串。你可能想再次使用这个代替
"=SUMIF(" & myrng1.Address & ",RC[-1]," & myrng2.Address & ")"
,您可能需要使用.Address
没有上面提到的“$”。
还有一件事。如果连续30是lastrow
那么你可以填入公式的所有单元格在一个走的,而不是使用AutoFill
查看此示例
With ThisWorkbook.Sheets("Sheet1")
.Range("B15:B30").Formula = "=SUMIF(" & _
myrng1.Address & _
",A15," & _
myrng2.Address & ")"
End With
或者
With ThisWorkbook.Sheets("Sheet1")
.Range("B15:B" & lastrow).Formula = "=SUMIF(" & _
myrng1.Address & _
",A15," & _
myrng2.Address & ")"
End With
此外,我想提请你注意到这个INTERESTING READ:p
嗨,非常感谢您给我的帮助,但是无论何时我尝试运行编辑部分,它给我一个运行时错误1004,应用程序定义或obj等定义的错误。任何帮助? –
你能用最新的代码更新你的问题吗?也让我们知道哪条线给你错误 –