VBA:如何将计算出的解决scheme放入新的工作表中?

我有一个非常基本的问题,但不知何故只是找不到解决scheme。 我试图写一个小程序,它从工作表中获取给定的股票价格,并计算给定时间段内的移动平均值。

到目前为止,这不是一个问题。

我现在的问题是,我想要解决scheme,即列B中的新工作表中的移动平均数以及A列中的等同股票价格。

我已经编写了代码来创build一个新的工作表,如下所示:

Sub CopyToNewSheet() Selection.Copy Sheets.Add(After:=Sheets(1)).Name = "MovingAverage" ActiveSheet.Paste Application.CutCopyMode = False End Sub 

这工作很好迄今。 程序的下一部分现在应该是移动平均线的计算。 我尝试了这一点,这也起到了作用:

 Sub CalculateMA(maLength As Integer) Application.ScreenUpdating = False Columns("B:B").Delete Range("B1").Value = "MA" + CStr(maLength) Range("B1").Offset(maLength, 0).Select Do While IsEmpty(Selection.Offset(0, -1)) = False Selection.Value = WorksheetFunction.Average(Range(Selection.Offset(-maLength + 1, -1), Selection.Offset(0, -1))) Selection.Offset(1, 0).Select Loop End Sub 

这里的问题是,这不会将计算出来的解决scheme放到新的工作表中,而是放到旧的工作表中。

你有什么想法,我必须改变,以便将解决scheme发布到其他工作表中?

非常感谢。

你的帮助表示赞赏。

你遇到一个非常普遍的问题:当你不指定你正在谈论的工作表时,你不能保证哪一个Excel将会select。 正确的做法是明确地告诉Excel。 作为一个好处,当你使用对象而不是.Selection ,事情会更快…所以当你创build新的工作表时,给它一个名字; 那么你可以参考它。

尝试以下修改你的最后一段代码:

 Sub CalculateMA(maLength As Integer) Dim ws1 As Worksheet Dim ws2 As Worksheet Dim sourceCell As Range Dim destCell As Range Application.ScreenUpdating = False Set ws1 = ActiveWorkbook.Sheets("stockData") ' whatever the name is... Set ws2 = ActiveWorkbook.Sheets("movingAverage") ws2.Columns("B:B").Delete ws2.Range("B1").Value = "MA" + CStr(maLength) Set sourceCell = ws1.Cells(maLength, 1) Set destCell = ws2.Cells(maLength, 2) Do While IsEmpty(sourceCell) = False destCell.Value = WorksheetFunction.Average(Range(sourceCell.Offset(-maLength + 1, 0), sourceCell)) Set sourceCell = sourceCell.Offset(1, 0) Set destCell = destCell.Offset(1, 0) Loop Application.ScreenUpdating = True End Sub 

我想这是你以后的样子。

您应该能够在您的范围之前指定要修改的工作表:

  Worksheets("MovingAverage").Range("B1").Value = "MA" + CStr(maLength) 

当你select范围时,做同样的事情,它应该如何工作。

Sub CopyToNewSheet ,在ActiveSheet.Paste行之前,添加以下内容:

 WorkSheets("MovingAverage").Activate 

这背后的原因是因为即使你只是添加一个表,它还不是ActiveSheet

build议:经过计算,看看结果,现在开启macros录制,执行你的复制到目标表单,现在停止macros。 你的代码准备好了! 这是通过擅长自我完成的。

在Excel中进行编程时,macros录制function可以大幅度提升。

试试看。

如果你不知道如何做macros,这里有一个链接 。 我真的鼓励你学习它,基本上你的电源表中的大部分代码都可以通过macros为你生成,也可以帮助你更快地学习excel vba语言。