Maybe this would be better.
Code:
Sub Maybe_With_Formula()
    With Range("Y2:Y" & Cells(Rows.Count, 18).End(xlUp).Row)
        .Formula = "=IF(COUNT(SEARCH({""SOFTWARE"", "" SOFTWARE"", "" SOFTWARE "",""SW "","" SW "","" SW""},RC[-7])),""Software"",""Hardware"")"
        .Value = .Value
    End With
End Sub
However, if Norie's code fits the bill, you should stick with that as it is the fastest and that is what you're after.