# Busqueda con más de una coincidencia



## rguez (Dec 27, 2002)

Saludos

Necesito hacer un búsqueda que tiene más de un resultado, me explico con un ejemplo:

2 AAA1
3 AAA5
1 AB45
10 AJP1
3 POK5
4 ABC2

deseo realizar un busqueda a través de la
primera columna que me entregue:

busca(=3) .... y resulte...

AAA5
POK5

Necesita hacerlo SIN MACROS.

He leido un post anterior, que de hecho
tenía unos ejemplos con formulas matriciales
y un link... pero no me resulta 

Espero vuestras luces :wink:

FELICES FIESTAS


----------



## Juan Pablo González (Dec 27, 2002)

Esto funciona sin macros, usando una fórmula de la página de Chip Pearson.Libro1ABCDE12AAA13AAA523AAA5POK531AB45 410AJP1 53POK5 64ABC2 Hoja1


----------



## Juan Pablo González (Dec 27, 2002)

Otra opción, que me parece más "sostenible" en el tiempo, es utilizar un Filtro avanzado, y copiando el resultado a otro lado de la hoja (O del libro)


----------



## rguez (Dec 27, 2002)

Efectivamente, es necesaria una
solición "sostenible". Pues lo que
te indiqué es un ejemplo y la tabla
original tiene -bastantes- más registos.

El tema del filtro avanzado ya lo tenia
considerado. El problema es que si cambia
el criterio hay que volver a aplicar el
filtro avanzado, cosa que en mi caso
debería ser automático y transparente al
usuario.

¿No existe una función de busqueda que
de como resultado una matriz de coincidencias
y no un solo valor?


----------



## Juan Pablo González (Dec 27, 2002)

Básicamente, no.

You creé una MVLOOKUP (Multiple VLOOKUP o BUSCARV) en VBA, pero, como funciona con VBA, utiliza macros.

Adicionalmente, las fórmulas no se pueden "expandir" automáticamente, para que llenen más celdas, eso toca hacerlo con anticipación, por eso en el ejemplo la fórmula se arrastra hasta la 5 fila.


----------



## oscar_igor (May 28, 2003)

Juan Pablo: ¿podrías decirme el codigo con el que creaste esta funcion MVLOOKUP ?
Mil Gracias nuevamente por que la verdad como molestamos.
Saludos


----------



## Juan Pablo González (May 28, 2003)

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>


----------



## oscar_igor (May 29, 2003)

FUNCIONA A LAS MIL MARAVILLAS. 
¿COMO LE PODRIA HACER PARA VER ESTA MATRIZ SIN TENER QUE OPRIMIR F2? 
MIL GRACIAS Y SALUDOS


----------



## Juan Pablo González (May 29, 2003)

Para ver todos los resultados de una vez ? ingresar la fórmula en varias celdas y presionar Control Shift Enter, para que sea una fórmula matricial... ese es el único "detallito", que toca manualmente expandir las fórmlas porque ellas no puede 'solitas' !


----------



## oscar_igor (May 29, 2003)

ary: 
mil gracias, esto realmente me ayudo mucho.
Saludos.


----------

