Buscar los siguientes datos que cumplan condición.

Hola

Muy buenas tardes, espero ser lo mas claro posible en la hoja1 tengo los siguiemtes datos(Nombre y Producto):

(A1)Nombre Producto

Luis Moto

Carlos Carro

Mario Bisicleta

Jorge Cama

Luis Bisicleta

Mario Carro

Luis Carro

Carlos Patines

en la hoja2 tengo lo siguiente:

Ejemplo

(A1)Digite el nombre (B1)DIGITO EL NOMBRE DE "Luis"

(A2)Producto

(A3)Quiero una formula que me traiga de la hoja1 el primer producto que tiene Luis eso se puede hacer con la siguiente formula =Buscarv(B1;Hoja1!A1:B9;2;FALSO) y me trae "Moto"

(A4)Quiero que me traiga de la hoja1 el segundo producto que tiene Luis que formula puedo utilizar?

(A5)Quiero que me traiga de la hoja1 el tercer producto que tiene Luis que formula puedo utilizar?

.

.

.

.

(AN)Quiero que me traiga de la hoja1 el N producto que tiene Luis que formula puedo utilizar?

1 Respuesta

Respuesta
1

Bueno hay dos modos de hacerlo y es una cuestión curiosa. A base de fórmulas estándar hay que incluir "formula arrays". Veamos paso a paso:

1. En mi ejemplo puse el nombre a cambiar en F1 (Luis o Carlos ...)y los datos salen por ejemplo en H1, H2... eso lo puedes cambiar a tu gusto.

2. En H1 escribo la fórmula:

=INDEX($B2:$B$9; SMALL(IF($F$1=$A$2:$A$9; ROW($A$2:$A$9)-MIN(ROW(A2:$A$9))+1; ""); ROW(A1)))

3. Estando el cursor aún en la barra de fórmulas pulso CTROL+SHIFT+ENTER. Con ello verás que un par de llaves "abrazan la formula"

4 Arrastro con el cursor la fórmula hasta H3 o H4 o el número de elementos máximo que puedas tener. Cuando tengas menos en los últimos tendrán un error de NUM! Que puedes incluso ocultar con IFERROR()

El tema de las llaves es fundamental porque si no la cosa no funciona. En mi ejemplo lo puse todo en la misma hoja. Te aconsejo que lo hagas así y cuando lo tengas claro, cambies de hoja o incluso incluyas rangos con nombre para facilitarte la tarea.

La otra manera de hacerlo es con una función de usuario. Yo me he inventado ésta:

Function MultiLookUp(nsimo As Integer, valor As Variant, origen As Range, destino As Range) As Variant
Dim i As Integer
Dim n As Integer
n = 0
'Busca el nsimo valor en la columna origen y devuelve su correspondencia en la columna destino
For Each c In origen
    If c.Value = valor Then ' este es uno
        n = n + 1
        If nsimo = n Then 'es el que busco
            i = c.Row
            Exit For
        End If
    End If
Next c
MultiLookUp = destino(i)
End Function

Esta aparece como una fórmula de usuario y te devuelve el n-esimo valor a partir de un origen.

En el ejemplo anterior lo siguiente en I1, I2. E I3 te da el mismo resultado que lo anterior.

=MultiLookUp(1; F1; $A$2:$A$9; $B$2:$B$9)

=MultiLookUp(2; $F$1; $A$2:$A$9; $B$2:$B$9)

=MultiLookUp(3; $F$1; $A$2:$A$9; $B$2:$B$9)

En principio el índice hay que ponerlo a pelo 1,2 ... si quieres puedes ponerlos en una columna, que te permite arrastrar para crearlos o usar algo como ROW(A1) que al arrastrar se va transformando en ROW(A2), ROW (A3) y produce los mismos resultados.

Elige una de las dos maneras y acómodala a tus gustos y necesidades concretas.

Hola

no se que pasa pero la primera formulas no me funcionan me aparece error #¿NOMBRE?

y la segunda no se como implementarla puedes ser un poco mas puntual.

Supongo que lo primero no te funciona porque tienes el Exce en español. Si es así las equivalencias son:

INDEX = INDICE

SMALL = K.ESIMO.MENOR

ROW = FILA

MIN = MIN (este es igual)

Para el segundo método tienes que entrar en el editor de VBA. O bien a través de los menús o bien con Alt+F11. En la ventana que te aparece verás a la izquierda el panel de proyectos . Ahí seleccionas tu libro y en el menu superior Insert (o Insertar) escoges módulo. Ahora tendrías a la derecha una zona en blanco. Ahí es donde tienes que pegar el código. Luego grabas y cierras el editor. De vuelta a tu hoja escribes la función en la celda igual que cualquier otra.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas