Este es el código... hace rato que no lo utilizo... utiliza únicamente coincidencias EXACTAS (El FALSO en el BUSCARV normalito), pero tiene un parámetro adicional, ValueIfError, que es opcional, el "famoso" #N/A cuando BUSCARV no encuentra una coincidencia.
<font face=Courier New>
<SPAN style="color:#00007F">Function</SPAN> MVLOOKUP(lookup_value <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>, table_array <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>, col_index_num <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Integer</SPAN>, <SPAN style="color:#00007F">Optional</SPAN> ValueIfError <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN> = CVErr(2042)) <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>
<SPAN style="color:#007F00">'****************************************</SPAN>
<SPAN style="color:#007F00">'* Procedure : MVLOOKUP</SPAN>
<SPAN style="color:#007F00">'* DateTime : Sep, 09 2002 16:54</SPAN>
<SPAN style="color:#007F00">'* Author : Juan Pablo González</SPAN>
<SPAN style="color:#007F00">'* Purpose : Multiple VLOOKUP. Return an array of all exact matches.</SPAN>
<SPAN style="color:#007F00">'* Parameters: Same as ELOOKUP, without range_lookup. Only works with exact matches</SPAN>
<SPAN style="color:#007F00">'****************************************</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> Result() <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Variant</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> i <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Integer</SPAN>
<SPAN style="color:#00007F">Dim</SPAN> Counter <SPAN style="color:#00007F">As</SPAN> <SPAN style="color:#00007F">Long</SPAN>
<SPAN style="color:#007F00">'If IsMissing(ValueIfError) Then ValueIfError = CVErr(2042)</SPAN>
<SPAN style="color:#00007F">If</SPAN> IsObject(table_array) <SPAN style="color:#00007F">Then</SPAN>
<SPAN style="color:#00007F">Set</SPAN> table_array = Intersect(table_array, table_array.Parent.UsedRange)
table_array = table_array
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">On</SPAN> <SPAN style="color:#00007F">Error</SPAN> <SPAN style="color:#00007F">Resume</SPAN> <SPAN style="color:#00007F">Next</SPAN>
<SPAN style="color:#00007F">Do</SPAN>
i = i + 1
Counter = <SPAN style="color:#00007F">UBound</SPAN>(table_array, i)
<SPAN style="color:#00007F">Loop</SPAN> <SPAN style="color:#00007F">Until</SPAN> Err.Number <> 0
<SPAN style="color:#00007F">If</SPAN> i < col_index_num <SPAN style="color:#00007F">Then</SPAN> MVLOOKUP = CVErr(2036): <SPAN style="color:#00007F">Exit</SPAN> <SPAN style="color:#00007F">Function</SPAN>
Counter = 0
<SPAN style="color:#00007F">For</SPAN> i = <SPAN style="color:#00007F">LBound</SPAN>(table_array, 1) <SPAN style="color:#00007F">To</SPAN> <SPAN style="color:#00007F">UBound</SPAN>(table_array, 1)
<SPAN style="color:#00007F">If</SPAN> table_array(i, 1) = lookup_value <SPAN style="color:#00007F">Then</SPAN>
Counter = Counter + 1
<SPAN style="color:#00007F">ReDim</SPAN> <SPAN style="color:#00007F">Preserve</SPAN> Result(1 <SPAN style="color:#00007F">To</SPAN> Counter)
Result(Counter) = table_array(i, col_index_num)
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">Next</SPAN> i
<SPAN style="color:#00007F">On</SPAN> <SPAN style="color:#00007F">Error</SPAN> <SPAN style="color:#00007F">GoTo</SPAN> 0
<SPAN style="color:#00007F">If</SPAN> Counter = 0 <SPAN style="color:#00007F">Then</SPAN>
MVLOOKUP = CVErr(2042) <SPAN style="color:#007F00">'xlErrNA</SPAN>
<SPAN style="color:#00007F">Else</SPAN>
MVLOOKUP = Application.Transpose(Result)
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">If</SPAN>
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Function</SPAN>
</FONT>