添加位于两个不同页面的两个范围内的单元格

我试图在两个范围内求和相应的单元格值,并用其中一个范围内的值replace。 看到我的代码片段如下:

For i = 1 To daterow.Rows.count - 1 If (outinter - diff) > 0.5 Then diff = diff + DateDiff("n", Indt(i - 1), Indt(i)) Y = Sheets("output").Cells(Rows.count, 1).End(xlUp).row + 1 Set inputRng = Sheets("Input").Range(Sheets("Input").Cells(i, 7), _ Sheets("input").Cells(i, ngag + 6)) Set outputRng = Sheets("Output").Range(Sheets("Output").Cells(Y, 6), _ Sheets("Output").Cells(Y, ngag + 5)) outputRng.value = Evaluate(outputRng.Address & "+" & inputRng.Address) Else 'Some Code here End If Next 

因此,我在第5行和第6行中设置了两个范围(inputRng和outputRng)。inputRng来自工作表(“input”),outputRng来自工作表(“输出”)。 当我运行代码时,“评估”函数(第7行)将范围相加,但是这里是问题:

这两个范围都是从同一个表导出的,因为在计算过程中我在表单(“input”)中,inputRng和outputRng的值是从表(“input”)派生的。 当我重写第7行如下:

 sheets("output").outputRng.value = Evaluate(sheets("output").outputRng.Address _ & "+" & sheets("input").inputRng.Address) 

我收到一条错误消息“对象不支持此属性或方法”。 有没有其他方法来强制代码从我的表格(“输出”)读取outputRng?

我可以遍历每个单元格并对这些值进行求和,但是运行代码需要很长时间,因为这个macros必须处理大量的数据。

任何想法将不胜感激。 感谢您的关注。

MPD


糟糕,服务器没有让我回答这个问题,所以我在这里发布解决scheme:

谢谢各位的意见。 事实上,Excell的最后评论点击了我的脑海! 所以,这里是我如何工作:

 Dim value() As Variant Dim shtIn As Worksheet, shtOut As Worksheet Set shtIn = Sheets("Input") Set shtOut = Sheets("Output") Redim Value(daterow.Rows.count - 1) For i = 1 To daterow.Rows.count - 1 If (outinter - diff) > 0.5 Then diff = diff + DateDiff("n", Indt(i - 1), Indt(i)) Y = shtOut.Cells(Rows.count, 1).End(xlUp).row + 1 Set inputrng = shtIn.Range(shtIn.Cells(i, 7), shtIn.Cells(i, ngag + 6)) Set outputRng = shtOut.Range(shtOut.Cells(Y, 6), shtOut.Cells(Y, ngag + 5)) value = Evaluate("Output!" & outputRng.Address & "+" _ & "Input!" & inputrng.Address) shtOut.Range(shtOut.Cells(Y, 6), shtOut.Cells(Y, ngag + 5)) = value Else 'Some Code here End If Next 

所以,而不是写出总和到另一个工作表的范围内,我把它存储到一个数组,然后将数组传递到输出范围,我可以做,而无需循环。

为什么不在第7行使用它呢?

  outputRng = outputRng.Value + inputRng.Value 

编辑:

你可以通过声明几个工作表对象和一些Range对象来帮助你debugging。

 Dim shtIn As Worksheet, shtOut As Worksheet Dim rngIn As Range, rngOut As Range Set shtIn = Sheets("Input") Set shtOut = Sheets("Output") Set rngIn = shtIn.Range("Input") Set rngOut = shtOut.Range("Output") 

然后在代码中使用这些范围,而不是重复的Sheets("...").Range("...")构造。