[英]Optimizing a “Copy” / “Insert Copied Cells” code
我對VBA比較陌生,但被公司“招募”,以幫助制作資源預測工具。 從我運行腳本到完成腳本的時間我有6秒的延遲,如果可能的話,我真的想把它降低到1或2秒。
作為旁注,我可能在我的Excel工作表中有一個荒謬的“IF”,“索引/匹配”和“間接”數字,所有這些都在從K列到EY列的一周結束日期...我'我不確定這是我的問題還是在我的代碼中。
作為一個FYI,這里是一個excel公式的例子 - 如果它似乎超載我應該改變它隨時讓我知道
=IF(INDEX(INDIRECT("$A$3:$M$"&$K$4)),MATCH($B26,INDIRECT("$K$3:$K$"&$K$4)),0),COLUMN(F26))<40000,"InputDate",INDEX(INDIRECT("$A$3:$M$"&$K$4),MATCH($B26,INDIRECT("$K$3:$K$"&$K$4)),0),COLUMN(F26))))
這是我的VBA代碼分三個步驟。
Marco4() - 在項目描述表中插入行,CopyM() - 從項目表創建一個字符串(Client Name,Proj#,Project name)項目摘要() - 復制最后7行的范圍,然后插入它們1排在最后一行之下。
Sub NewProject()
Macro4
CopyM
ProjectSummary
End Sub
----------------------------------------------------------
Sub Macro4()
'insert a new line in the project description field (top)
Range("A1").End(xlDown).End(xlDown).Offset(1).EntireRow.Insert Shift:=xlDown,
CopyOrigin:=xlFormatFromLeftOrAbove
Range("G3").Copy Destination:=Range("H1").End(xlDown).End(xlDown)
End Sub
-----------------------------------------------------------
Sub CopyM()
'Copy range of cells in column K which correspond only to project description field
Dim rng As Range
Dim rng2 As Range
Set rng = ActiveSheet.Range("K1").End(xlDown).End(xlDown)
Set rng2 = rng.Offset(1)
rng.Copy Destination:=rng2
Application.CutCopyMode = False
End Sub
------------------------------------------------------------
Sub ProjectSummary()
Dim lastrowe As Integer
Dim lastrowb As Integer
Dim pnext As Integer
lastrowe = Range("D2000").End(xlUp).Offset(2).Row
lastrowb = Range("A2000").End(xlUp).Offset(-1).Row
Rows(lastrowb & ":" & lastrowe).Copy
pnext = Range("D2000").End(xlUp).Offset(3).Row
Rows(pnext).Insert Shift:=xlDown
End Sub
INDIRECT是一個易失性函數,因此只要工作簿完成,它就會重新計算,即使它的輸入沒有改變。 我建議使用INDEX:= IF(INDEX($ A $ 3:INDEX($ M:$ M,$ K $ 4),MATCH($ B26,$ K $ 3:INDEX($ K:$ K,$ K $ 4) ),0),COLUMN(F2 6))<40000, “InputDate”,INDEX($ A $ 3:INDEX($ M:$ M,$ķ$ 4),MATCH($ B26,$ķ$ 3:INDEX($ K:$ K,$ K $ 4),0),COLUMN(F26))))這是半易失性的,因此只會在工作簿打開或輸入改變時重新計算。 - 羅里5月8日12:41
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.