Two further options. Option 2 needs a helper column; AS in this example.
Option Explicit
Sub DeleteRowWithContents1()
Dim lRow As Long
Dim lCol As Long
Dim NA As Range, Rng As Range
Dim dic As Object, d, arr
Dim FA As String
Dim i
Set dic = CreateObject("Scripting.dictionary")
With Cells
Set NA = .Find(What:="NA", _
After:=Cells(1, 1), _
LookAt:=xlWhole, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
FA = NA.Address
Do
If Not dic.exists(NA.Row) Then dic.Add NA.Row, vbNull
Set NA = .FindNext(NA)
Loop Until NA.Address = FA
End With
arr = Application.Transpose(dic.keys)
Set Rng = Rows(arr(1, 1))
For i = 2 To UBound(arr)
Set Rng = Union(Rng, Rows(arr(i, 1)))
Next i
Rng.Delete
Cells(1, 1).Select
End Sub
Sub DeleteRowWithContents2()
Dim LR
LR = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(1, 45), Cells(LR, 45)).Formula = "=COUNTIF(RC1:RC[-1],""NA"")"
Range("AS1").EntireRow.Insert
Columns("AS:AS").AutoFilter Field:=1, Criteria1:=">0"
Columns("AS:AS").SpecialCells(xlCellTypeVisible).EntireRow.Delete
Columns("AS:AS").ClearContents
Cells(1, 1).Select
End Sub