As Paul did, I would use the Selection range as the Target range. Notice that I just changed the first 3 lines of code.
When you write worksheet or workbook event code, you can send the input parameter(s) to a Sub if you ever need to reuse the code. Then just call that routine in your events as needed. Of course if you write event code to iterate all cells in a Target range, that event will fire for each cell in the target intersection. Then just cut and paste back to get data up to date.
Sub Module_Change()
'http://answers.microsoft.com/en-us/office/forum/office_2007-excel/insert-formula-for-row-using-worksheet-change/aa1d08d9-9981-4f96-ad57-b1bd1d72e7bb?msgId=1660522c-db3b-4a74-8fd0-fe4a25676dbd
Dim r As Variant, s As Variant, Target as Range
Set Target = Selection
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Columns(1)) Is Nothing Then
Application.EnableEvents = False
On Error Resume Next
With Target.Offset(, 1)
.Formula = "=VLookup(" & Target.Address & ", Data, 5, False)"
.Value = .Value
End With
' With Target.Offset(, 2) 'Column C
' .Formula = "=VLookup(" & Target.Address & ", Data, 6, False)"
' .Value = .Value
' End With
On Error Goto 0
'get rid of NA
If WorksheetFunction.IsNA(Target.Offset(, 1)) Then
Target.Offset(, 1).ClearContents
End If
' If WorksheetFunction.IsNA(Target.Offset(, 2)) Then
' Target.Offset(, 2).ClearContents
' End If
End If
Application.EnableEvents = True
End Sub