繁体   English   中英

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

[英]VBA - How to Copy and Paste the last value in a column to another Sheet

我有一个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中,因为这是您选择粘贴到的单元格。 因此,您将覆盖您的价值。

我将为输出行设置一个行计数器,然后执行以下操作。

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

这使用数字表示行和列-因此Cells(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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM