Syntax of IIF statement:
IIF(expression, do this if expression true, do this if expression false)
So in your example, if MACK.ID is null the first statement is true and "No ID Number" will show then the IIF statement finishes. If MACK.ID is not null then the first statement is false so the IIF statement jumps to the false part which is another IIF statement and the whole process repeats. An IIF statement only runs once.
You probably want to concatenate your IIF statements together somehow. Try something like this:
Reason: IIf([MACK.ID] Is Null,"No ID Number,","") & IIf([MACK.MAILCODE] Is
Null,"No Mailcode,","") & IIf([MACK.TITLE] Is Null,"No Title,","")
For each test, if the expression is false you will get an empty string. If the expression is true, you will get your text plus a comma at the end which you could replace afterwards if you so wish.