try this
I have done it using variant arrays which is much faster than working directly in the worksheet.
Sub OTLBOMMerge()
Dim LastRow As Long
Dim LastRowC As Long
Dim Parts As Long
Dim ComparePart As String
Dim FindPart As String
Dim CopyRange As String
'set up array to copy specfic columns
Dim indi(1 To 10) As Integer
indi(1) = 17
indi(2) = 18
indi(3) = 22
indi(4) = 24
indi(5) = 26
indi(6) = 27
indi(7) = 28
indi(8) = 32
indi(9) = 34
indi(10) = 35
LastRowC = Sheets("Material Sheet").Range("C" & Rows.Count).End(xlUp).Row
'Finds Last Row of Data on Materials Sheet.
With Worksheets("Material Sheet")
Materialarray = Range(.Cells(1, 1), .Cells(LastRowC, 40))
End With
lastrowbom = Sheets("BOM").Range("C" & Rows.Count).End(xlUp).Row
'Finds Last Row of Data on BOM Sheet.
With Worksheets("BOM")
BOMarray = Range(.Cells(1, 1), .Cells(lastrowbom, 54))
Range(.Cells(6, 54), .Cells(3 + 2 * lastrowbom, 63)) = ""
matched = Range(.Cells(1, 54), .Cells(lastrowbom, 63))
Blankarr = Range(.Cells(2 + lastrowbom, 54), .Cells(3 + 2 * lastrowbom, 63))
blanki = 2
Blankarr(1, 1) = "Not found"
Materials = 1
For Parts = 2 To LastRowC Step 1
'Starts the Loop that will move through the parts on the materials sheet.
found = False
For i = 6 To lastrowbom
If Materialarray(Parts, 17) = BOMarray(i, 2) Then
found = True
'Looks for ComparePart on the BOM Sheet
For k = 1 To 10
matched(i, k) = Materialarray(Parts, indi(k))
Next k
End If
Next i
If Not (found) Then
' copy to the blankarray
For k = 1 To 10
Blankarr(blanki, k) = Materialarray(Parts, indi(k))
Next k
blanki = blanki + 1
End If
Next Parts
' write the array aback to the spreadsheet
Range(.Cells(1, 54), .Cells(lastrowbom, 63)) = matched
Range(.Cells(lastrowbom + 2, 54), .Cells(3 + 2 * lastrowbom, 63)) = Blankarr
End With
End Sub