 <p>All you need to do is rewrite HistoricalDataShift to operate on itself. It should work just fine then.</p> <pre><code>Sub HistoricalDataShift() Dim wb As Workbook Set wb = ThisWorkbook Dim ws As Worksheet For Each ws In wb.Worksheets ws.Activate ' ws.Rows("18:1000").Select Selection.Copy ws.Range("A19").Select ActiveSheet.Paste ws.Rows("15:15").Select Selection.Copy ws.Range("A18").Select ActiveSheet.Paste Next ws End Sub </code></pre> <p>Also to make your code work better, you can do this:</p> <pre><code>Sub HistoricalDataShift() Dim wb As Workbook Set wb = ThisWorkbook wb.Activate Dim ws As Worksheet For Each ws In wb.Worksheets Call ws.Rows("18:1000").Copy(ws.Range("A19")) Call ws.Rows("15:15").Copy(ws.Range("A18")) Next ws End Sub </code></pre>