What IFERROR does, is return a different value (or formula) if your formula returns an error (like it doesn’t find a New Badge ID because the Old Badge ID is the one on file).
The format is: =IFERROR(value,value_if_error)
Value: You’ll put the entire VLOOKUP formula here VLOOKUP(E2,$I$2:$L$18,4,FALSE)
value_if_error: You’ll put a new VOOKUP formula here (looking up by Old Badge Number instead). VLOOKUP(D2,$I$2:$L$18,4,FALSE) Notice the only thing that changed is that you are looking up column D instead of column E.
Now in Cell H2 you have this: =IFERROR(VLOOKUP(E2,$I$2:$L$18,4,FALSE), LOOKUP(D2,$I$2:$L$18,4,FALSE))
Just like you did to test out the lookup based on New Badge Number, drag H2 down your entire list. Now it should return a value for everyone with an Old or New Badge Number on file.
And again, change 18 to be the very last row in your data table.