Rather than evaluate every formula twice with an IF(ISERROR() approach, let's use the Excel 2007 approach of IFERROR.
Change your existing formula to:
=IFERROR(INDEX('Source Data'!$A$2:$Q$5000,SMALL(IF(('Source Data'!$I$2:$I$5000>=$O$1)*('Source Data'!$I$2:$I$5000<=$P$1)*('Source Data'!$M$2:$M$5000>0),ROW('Source Data'!$A$2:$Q$5000)-ROW('Source Data'!$A$2)+1,ROW($Q$5000)+1),ROW()-1),1),"")
If you're NOT using Excel 2007, we can still use this, but you have to add the IFERROR function to your sheet. Here's the code:
Function IFERROR(ToEvaluate As Variant, Default As Variant) As Variant
If IsArray(ToEvaluate) Then
IFERROR = IIf(IsError(ToEvaluate(1)), Default, ToEvaluate)
Else
IFERROR = IIf(IsError(ToEvaluate), Default, ToEvaluate)
End If
End Function
To add it to your sheet, press Alt-F11
Click Insert>Module
Paste in the code above
Alt-F11 to close the editor
Save your sheet
Now the =IFERROR(FormulaToUse,DoThisIfErrorOccurs) format will work.
Bookmarks