I assume when you mean blank it's actually a zero length string. If this is the case add a new clause to your IF statement, IF [Field] = "" THEN "NA" END
If you're pointing to that 0.00 value because you wanted it to be interpreted as null, (and therefore displayed under your "NA" clause), it's not null. Zero is an actual value, so Tableau is displaying it as 0.00. If you want zeros to be treated as null, add more to your syntax to account for that.
Zero is the actual value present in the data it is not null value. if you want to zeroes also represented to be as NA then you need to add when zero it need to be NA in your calculation
Change this formula like this:
If AVG(Numeric value )< 0.00 or AVG(Numericvalue) >999
elseif ISNULL(AVG(Numeric Value)) Then "NA"
ELSEIF AVG(Numeric value)=" " then "NA"
That's because the value is an actual zero, not a space. It's a numeric field. Just check for zero, not space.
The output of the calc field is a string value, but it's based on the contents of a numeric field.
As for padding out nulls where no record exists, there are a bunch of threads that discuss this.
Here is one:
Just search for "pad null" on the forum and try out some of the techniques discussed in those threads. At times it depends on your data and what you are doing in there.
However, if the cell is loaded with a value that is the output of a calc, and if the marks are blank because the result of the calc is a null numeric value, you might be able to correct this simply by wrapping the whole calc in the ZN() function. That function says to replace null with zero. (Or, in the calc where you are loading "NA", you can do:
ELSEIF ISNULL([Numeric value]) then "NA"