No worries. I just looked at it. It appears to work. And it serves my three primary use cases:
1) I can add a new consultant and fee into the fee table, as required
2) I can add any consultant to any project and the summaries automatically update
3) I can create a new project mapping and add it to the summaries table
I was still mystified as to why this worked because there is no documentation on this behavior (if you have a link you should it to this conversation). But breaking this down it looks like
[pre]
Code:
=INDEX($J$2:$J$5,,1)
creates a lookup vector of names, whereas
=INDEX($K$2:$K$5,,1)
[/pre]
creates the result vector of fees. (It seems like this happens in SUMPRODUCT implicitly as Hui points out, but by themselves, you have to create these as array formulas to see the results).
Anyway that's the mapping specification. Then LOOKUP with a lookup value *that is a range* uses the lookup->result vectors to map each member of the lookup value array (which are names) to a fee. It even works if the lookup value array is of different length to the lookup/result vectors. Cool!
Ergo - exactly what I was looking for out of VLOOKUP if you passed a lookup "value" that was a vector.
I agree, you found it. Brilliant!