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 )值一起放入一张新纸张并显示如下。

图片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)它看起来像你总是试图粘贴在单元格A1中的值,因为这是你select要粘贴的单元格。 所以你会覆盖你的价值。

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

 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)一般来说,如果你想复制/粘贴大面积的date直接分配可能太慢,所以你会想要复制 – >粘贴假设“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!)如果您要复制的单元格范围,您需要指定“左上angular”和“右下angular”的范围。

3)设置工作表variables会更好

  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 

好的,那可能比你想要的要多一点,但是我希望它有帮助。