![](/img/trans.png)
[英]Copy and paste a range of cell values into another sheet with VBA and using Offset
[英]Loop input values in another sheet through cell reference then Copy formula value and paste it to another sheet using vba
[
我正在处理两张表格 Sheets("UPDATER") = 放置输入数据的位置(超过 700 行)以及需要复制数据的位置 Sheets("Historical_vol) = 我保存公式 (C9:N9) 和输入的位置来自history_vol表单元格A9中的更新表的记录。目的是获取粘贴在sheets("updater").columns("AB")中的每个底层证券的值,但这些值是从sheets("Historical_vol")中计算出来的.column(C9:F9) 然后将这些值粘贴到每行从单元格 AD4 开始的 sheet("updater") 中。
Sub historical_vol()
Dim i As Long
Dim a As Worksheet
Dim b As Worksheet
lr = Worksheets("UPDATER").Cells(Rows.count, "AB").End(xlUp).Row
Set a = Worksheets("UPDATER")
Set b = Worksheets("Historical_vol")
For i = 4 To lr
b.Range("A9").value = a.Range("AB4" & i).value
'b.Range("C9":F9").Calculate
Application.Wait (Now + TimeValue("00:00:02"))
b.Range("C9:F9").Copy
NextRow = Cells(Rows.count, "AD").End(xlUp).Row + 1
Cells(NextRow, "AD").Select
ActiveSheet.Paste
Next i
End Sub
起初我注意到b.Range("A9").value = a.Range("AB4" & i).value
应该是b.Range("A9").value = a.Range("AB" & i).value
正如我看到您正在使用Application.Wait
,我认为它是用于计算的。 所以,我建议使用xlCalculationManual
计算并在完成后将其重置为自动,如下所示。
Sub historical_vol()
Application.ScreenUpdating = True
'This will help to watch the status bar update
Application.Calculation = xlCalculationManual
Dim wb As Workbook, uPd As Worksheet, hV As Worksheet
Dim lr As Long, cl As Range
Set wb = ThisWorkbook
Set uPd = wb.Sheets("UPDATER")
Set hV = wb.Sheets("Historical_vol")
lr = uPd.Cells(Rows.Count, "AB").End(xlUp).Row
i = 0
For Each cl In uPd.Range("AB4:AB" & lr)
hV.Range("A9").Value = cl.Value
hV.Calculate
cl.Offset(0, 2).Resize(1, 4).Value = hV.Range("C9:F9").Value
i = i + 1
Application.StatusBar = i '& " / " & lr - 3
'View on status bar number of records completed out of total records (lr-3)
Next
Application.Calculation = xlCalculationAutomatic
End Sub
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.