Yes the problem is with the "TRUE", but it does not return the "closest
match". To quote the help:
"If TRUE or omitted, an approximate match is returned. In other words, if an
exact match is not found, the next largest value that is less than
lookup_value is returned."
VLookUp is a top-down search and stops as soon as there is an exact match or
a next largest value to return.
As the help says:
"If range_lookup is TRUE, the values in the first column of table_array must
be placed in ascending order: ..., -2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE;
otherwise VLOOKUP may not give the correct value."
In practice, the "TRUE" form of the lookup only tends to be used for picking
factors out of numeric tables, where each factor covers a range of input
values. The help for VLookUp has such an example. I reckon I'd use at
least 100 "FALSE" lookups for each "TRUE" lookup.