VBA - 如何将列中的最后一个值复制并粘贴到另一个工作表

时间:2016-05-09 04:56:34

标签: excel vba excel-vba

我有一个Excel电子表格,我想在列中查找最后一个值并将其复制并粘贴到另一个表格中。

如下面的代码所示它工作的方式是我在循环结束时递增频率并将计算向右移动,以便我可以插入下一个频率值的值。频率从0.05开始,每个循环递增0.01,并上升到1.0。

在向右移动值之前,我正在计算范围的产品总和的绝对和和平方根,如下面的代码所示。

MAX = 1502
Src = 0
N = 0
Freq = 0.05
Freqmax = 1

Op = ActiveSheet.Range("K2")

For Freq = 0.05 To Freqmax Step 0.01

  For Src = 0 To MAX Step 1

    Inp = ActiveSheet.Range("K" & 2 + Src)

    Op = ma0 * Inp + ma1 * mx1 + ma2 * mx2 - mb1 * my1 - mb2 * my2
    mx2 = mx1
    mx1 = Inp
    my2 = my1
    my1 = Op

    ActiveSheet.Range("$L$1").Value = "Output(" & Freq & ")"
    ActiveSheet.Range("$M$1").Value = "Error(" & Freq & ")"
    ActiveSheet.Range("$N$1").Value = "ErSQ(" & Freq & ")"

    ActiveSheet.Range("L" & 2 + Src) = Op
    ActiveSheet.Range("M" & 2 + Src) = ActiveSheet.Range("L" & 2 + Src) - ActiveSheet.Range("K" & 2 + Src)
    ActiveSheet.Range("N" & 2 + Src) = ActiveSheet.Range("M" & 2 + Src) * ActiveSheet.Range("M" & 2 + Src)

  Next

LastRow = ActiveSheet.Range("M" & Rows.Count).End(xlUp).Row
LastRow1 = ActiveSheet.Range("N" & Rows.Count).End(xlUp).Row

ActiveSheet.Cells(LastRow + 2, "M").Formula = "=SUMPRODUCT(ABS(M2:M" & LastRow & "))"
ActiveSheet.Cells(LastRow1 + 2, "N").Formula = "=SQR(SUMPRODUCT(ABS(N2:N" & LastRow1 & ")))"

LastValue = ActiveSheet.Range("N" & LastRow1).Value.Copy
Sheets("Sheet5").Activate
Range("A1").Select
ActiveSheet.Paste

ActiveSheet.Columns("L:N").Insert Shift:=xlToRight

Next

End Sub

我想将产品总和值(ActiveSheet.Cells(LastRow1 + 2, "N").Formula = "=SQR(SUMPRODUCT(ABS(N2:N" & LastRow1 & ")))")的平方根与当前循环的频率(Freq)值一起复制到新工作表中,并显示如下所示。

Image 1等等......

我尝试过这样做但无济于事。谁能告诉我我该怎么做?

2 个答案:

答案 0 :(得分:1)

替代

LastValue = ActiveSheet.Range("N" & LastRow1).Value.Copy
Sheets("Sheet5").Activate
Range("A1").Select
ActiveSheet.Paste

Sheets("Sheet5").Range("A" & Sheets("Sheet5").Rows.Count).End(xlUp).Offset(1).Resize(, 2) = Array(Freq, ActiveSheet.Range("N" & LastRow1 + 2))

但为了加快速度,你最好使用数组来存储值,并在最后将它们写入单元格

答案 1 :(得分:0)

1)看起来您总是尝试将值粘贴到单元格A1中,因为这是您选择要粘贴的单元格。所以你会覆盖你的价值。

我会为输出行设置一个行计数器,并执行以下操作。

Sheets("Sheet5").Cells(outputrow,1) = ActiveSheet.Range("N" & LastRow1)

Sheets("Sheet5").Cells(outputrow,1) = ActiveSheet.Cells(LastRow1,14) 'Column N is the 14th column

请注意,您无需激活要“粘贴”的工作表。实际上,您不必激活要复制的工作表。

2)一般情况下,如果你想复制/粘贴一个大的日期区域直接分配可能太慢,所以你想复制 - >粘贴 假设“Sheet1”是包含要复制的数据的工作表,而Sheet5是要将值粘贴到的工作表,则可以执行以下操作:

Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(10, 2), Worksheets("Sheet1").Cells(12, 5)).Copy
Worksheets("Sheet5").Cells(13, 11).PasteSpecial Paste:=xlPasteValues 'Paste entire range with cell (13,11) ("K13") being the top left cell of the target

这使用数字来表示行和列 - 因此单元格(10,2)表示第10行,第2列(或B10!) 如果要复制一系列单元格,则需要指定范围的“左上角”和“右下角”。

3)设置工作表变量

会更好
   Dim wsSource As Worksheet
   Dim wsTarget As Worksheet

   Set wsSource = ThisWorkbook.Worksheets("Sheet1")  'Don't forget to Set the worksheet to point at the right sheet!
   Set wsTarget = ThisWorkbook.Worksheets("Sheet5")

   'Copying from B10:E12 in Sheet1 to K13 in Sheet5
   wsSource.Range(wsSource.Cells(10, 2), wsSource.Cells(12, 5)).Copy
   wsTarget.Cells(13, 11).PasteSpecial Paste:=xlPasteValues

好的,这可能比你想要的要多一些,但我希望它有所帮助。