Podemos substituir um dos loops por um Match.
Também queremos fazer um loop de trás para baixo.
Sub Remove()
Dim nsx As Worksheet
Dim fc As Worksheet
Set nsx = Sheets("NonNSX")
Set fc = Sheets("Forecast Data")
Dim lookUp As Range
Dim n As Long
Dim d As Long
NumRows = fc.Range("D1", fc.Range("D2").End(xlDown)).Rows.Count
Set lookUp = nsx.Range("A1", nsx.Range("A1").End(xlDown))
For n = NumRows To 2 Step -1
d = 0
On Error Resume Next
d = Application.WorksheetFunction.Match(fc.Range("D" & n), lookUp, 0)
On Error GoTo 0
If d > 0 Then
fc.Rows(n).Delete
End If
Next n
End Sub