[英]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
)值一起进入一个新的工作表,如下所示进行显示。
我曾尝试这样做,但无济于事。 谁能告诉我我该怎么做?
替代
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.