The first thing I see that slows down the execution of the code is using the clipboard to copy data, for example, instead of
Sheets("Sensitivity Analysis").Range("r12:w17").Copy
Sheets("Sensitivity Analysis").Range("r4").PasteSpecial Paste:=xlPasteValues
you can write
shSA.Range("R4").Resize(6, 6).Value = shSA.Range("R12:W17").Value
and instead of
Sheets("Sensitivity Analysis").Range("s4").Copy
Sheets("Rev + Cost").Range("F3").PasteSpecial Paste:=xlPasteValues
use
shRC.Range("F3").Value = shSA.Range("S4").Value
You can also abandon Select, which also significantly slows down the operation.
Below is the code after improvement. I do not exclude that it can be further optimized, but this is a job not for me.
Sub SASC_1()
Dim shSA As Worksheet
Dim shRC As Worksheet
Dim shA As Worksheet
Application.ScreenUpdating = False
Set shSA = ThisWorkbook.Sheets("Sensitivity Analysis")
Set shRC = Sheets("Rev + Cost")
Set shA = Sheets("Assumptions")
'shSA.Range("R12:W17").Copy
'shSA.Range("R4").PasteSpecial Paste:=xlPasteValues
shSA.Range("R4").Resize(6, 6).Value = shSA.Range("R12:W17").Value
'first line
' sale -5% and cost -5
'shSA.Range("S4").Copy
'shRC.Range("F3").PasteSpecial Paste:=xlPasteValues
shRC.Range("F3").Value = shSA.Range("S4").Value
shRC.Range("E26").Value = shSA.Range("R5").Value
Call CopyUntilZero_1(shA)
shSA.Range("S5").Value = shA.Range("D28").Value
' sale -2.5% and cost -5
shRC.Range("F3").Value = shSA.Range("T4").Value
Call CopyUntilZero_1(shA)
shSA.Range("T5").Value = shA.Range("D28").Value
' sale same and cost -5
shRC.Range("F3").Value = shSA.Range("U4").Value
Call CopyUntilZero_1(shA)
shSA.Range("U5").Value = shA.Range("D28").Value
' sale 2.5% and cost -5
shRC.Range("F3").Value = shSA.Range("V4").Value
Call CopyUntilZero_1(shA)
shSA.Range("V5").Value = shA.Range("D28").Value
' sale 5% and cost -5
shRC.Range("F3").Value = shSA.Range("W4")
Call CopyUntilZero_1(shA)
shSA.Range("W5").Value = shA.Range("D28")
'second line
' sale -5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("S4").Value
shRC.Range("E26").Value = shSA.Range("R6").Value
Call CopyUntilZero_1(shA)
shSA.Range("S6").Value = shA.Range("D28").Value
' sale -2.5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("T4").Value
Call CopyUntilZero_1(shA)
shSA.Range("T6").Value = shA.Range("D28").Value
' sale same and cost -2.5
shRC.Range("F3").Value = shSA.Range("U4").Value
Call CopyUntilZero_1(shA)
shSA.Range("U6").Value = shA.Range("D28").Value
' sale 2.5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("V4").Value
Call CopyUntilZero_1(shA)
shSA.Range("V6").Value = shA.Range("D28").Value
' sale 5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("W4").Value
Call CopyUntilZero_1(shA)
shSA.Range("W6").Value = shA.Range("D28").Value
'third line
' sale -5% and cost 0
shRC.Range("F3").Value = shSA.Range("S4").Value
shRC.Range("E26").Value = shSA.Range("R7").Value
Call CopyUntilZero_1(shA)
shSA.Range("S7").Value = shA.Range("D28").Value
' sale -2.5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("T4").Value
Call CopyUntilZero_1(shA)
shSA.Range("T7").Value = shA.Range("D28").Value
' sale same and cost same BASE POSITION
shRC.Range("F3").Value = shSA.Range("U4").Value
Call CopyUntilZero_1(shA)
shSA.Range("U7").Value = shA.Range("D28").Value
' sale 2.5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("v4").Value
Call CopyUntilZero_1(shA)
shSA.Range("V7").Value = shA.Range("D28").Value
' sale 5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("W4").Value
Call CopyUntilZero_1(shA)
shSA.Range("W7").Value = shA.Range("D28").Value
'fourth line
' sale -5% and cost -5
shRC.Range("F3").Value = shSA.Range("S4").Value
shRC.Range("E26").Value = shSA.Range("R8").Value
Call CopyUntilZero_1(shA)
shSA.Range("S8").Value = shA.Range("D28").Value
' sale -2.5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("T4").Value
Call CopyUntilZero_1(shA)
shSA.Range("T8").Value = shA.Range("D28").Value
' sale same and cost same
shRC.Range("F3").Value = shSA.Range("U4").Value
Call CopyUntilZero_1(shA)
shSA.Range("U8").Value = shA.Range("D28").Value
' sale 2.5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("V4").Value
Call CopyUntilZero_1(shA)
shSA.Range("V8").Value = shA.Range("D28").Value
' sale 5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("W4").Value
Call CopyUntilZero_1(shA)
shSA.Range("w8").Value = shA.Range("D28").Value
'fifth line
' sale -5% and cost -5
shRC.Range("F3").Value = shSA.Range("S4").Value
shRC.Range("E26").Value = shSA.Range("R9").Value
Call CopyUntilZero_1(shA)
shSA.Range("S9").Value = shA.Range("D28").Value
' sale -2.5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("T4").Value
Call CopyUntilZero_1(shA)
shSA.Range("T9").Value = shA.Range("D28").Value
' sale same and cost same
shRC.Range("F3").Value = shSA.Range("U4").Value
Call CopyUntilZero_1(shA)
shSA.Range("u9").Value = shA.Range("D28").Value
' sale 2.5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("V4").Value
Call CopyUntilZero_1(shA)
shSA.Range("V9").Value = shA.Range("D28").Value
' sale 5% and cost -2.5
shRC.Range("F3").Value = shSA.Range("W4").Value
Call CopyUntilZero_1(shA)
shSA.Range("W9").Value = shA.Range("D28").Value
'end
shRC.Range("F3").Value = shSA.Range("U4").Value
shRC.Range("E26").Value = shSA.Range("R7").Value
shSA.Select
Application.ScreenUpdating = True
End Sub
Sub CopyUntilZero_1(wks As Worksheet)
With wks
.Range("D28").ClearContents
Do While Abs(.Range("K32").Value) > 0.5
.Range("D28").Value = .Range("K34").Value
Loop
End With
End Sub
Artik
Bookmarks