Aside from some syntax errors that others have discussed, you haven't specified what is bieng copied before you try to use the .paste method. I would just avoid the copy and paste methods (they are inefficient) and set the cells equal to the value of the range in the if statement like so:
Sub CopyValues() 'Declare variables 'Declare sheet variables Dim Sourcews As Worksheet Dim Pastews As Worksheet 'Declare counter variables Dim i As Integer Dim n As Integer Dim lastrow As Long Set Sourcews = ThisWorkbook.Sheets("sheet1") Set Pastews = ThisWorkbook.Sheets("sheet2") lastrow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For i = 3 To lastrow If Sourcews.Range("AA" & i).Value = "Needed Value" Then Pastews.Range("C18") = Sourcews.Range("AA" & i).Value Pastews.Range("D18") = Sourcews.Range("AA" & i).Value Pastews.Range("E18") = Sourcews.Range("AA" & i).Value Pastews.Range("F18") = Sourcews.Range("AA" & i).Value Pastews.Range("G18") = Sourcews.Range("AA" & i).Value End If Next End Sub
Or you could set the value as a variable for cleaner looking code, like this:
Sub CopyValues() 'Declare variables 'Declare sheet variables Dim Sourcews As Worksheet Dim Pastews As Worksheet 'Declare counter variables Dim i As Integer Dim n As Integer Dim lastrow As Long Dim x As String Set Sourcews = ThisWorkbook.Sheets("sheet1") Set Pastews = ThisWorkbook.Sheets("sheet2") lastrow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For i = 3 To lastrow If Sourcews.Range("AA" & i).Value = "Needed Value" Then x = Sourcews.Range("AA" & i).Value Pastews.Range("C18") = x Pastews.Range("D18") = x Pastews.Range("E18") = x Pastews.Range("F18") = x Pastews.Range("G18") = x End If Next End Sub
Or, to make the code even more concise, you can combine the range that is receiving the copied value as Pastews.Range("C18:G18") = x like this:
Sub CopyValues() 'Declare variables 'Declare sheet variables Dim Sourcews As Worksheet Dim Pastews As Worksheet 'Declare counter variables Dim i As Integer Dim n As Integer Dim lastrow As Long Dim x As String Set Sourcews = ThisWorkbook.Sheets("sheet1") Set Pastews = ThisWorkbook.Sheets("sheet2") lastrow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For i = 3 To lastrow If Sourcews.Range("AA" & i).Value = "Needed Value" Then x = Sourcews.Range("AA" & i).Value Pastews.Range("C18:G18") = x End If Next End Sub
I know I posted a lot, but I wanted to show you a progression of how your could can be more concise and efficient. I hope it helps.
Pastews.Cells("H:18").PasteShould it bePastews.Range("H18").Paste? (Have not checked) And all values should be like this.