Datos repetidos en BUSCARV

15/01/2004 - 11:33 por Miguel | Informe spam
Tengo una fórmula con la que mediante BUSCARV quiero recuperar un dato de un
rango Ax:By. En la columna A tengo varios grupos de datos iguales, quiero
que me recupere los de la columna B. Por lo general BUSCARV si encuentra
varios datos iguales recupera el primero de la lista, yo quiero que me
recupere el primero de la lista y poniendo la misma fórmula abajo luego me
recupere el segundo y así sucesivamente. Mirad si alguna sabeis como hacer
esto.
p.e. BUSCARV("b";{"a";"b";"b"}/{"1";"2";"0"};2;FALSO) ,me devuelve "2"

pues yo quiero que si en la celda de abajo pongo la misma fórmula me
devuelva "0"

Muchas Gracias

Preguntas similare

Leer las respuestas

#1 Benito Merino
15/01/2004 - 14:47 | Informe spam
Hola Miguel

He preparado una función que creo que te irá bien.

Function buscarvbm(valor_buscado As Range, rango_consulta
As Range, area_datos As Range, columna As Integer)
' "valor_buscado" es la celda de la que queremos devolver
el valor
' "rango_consulta" es el área donde esta incluido el
valor_buscado donde observaremos el número de ocurrencia
' "area_datos" es la matriz similar a la de buscarv
' "columnas" es el indicador de columnas, igual que en
buscarv

Dim celdainicial As Range
For Each c In rango_consulta
If c.Value = valor_buscado.Value Then ocurrencia =
ocurrencia + 1
If c.Address = valor_buscado.Address Then Exit For
Next

columna_inicio = area_datos.Column
fila_inicio = area_datos.Row
numerofilas = area_datos.Rows.Count
For Each celda In Range(Cells(fila_inicio,
columna_inicio).Address & ":" & Cells(fila_inicio +
numerofilas - 1, columna_inicio).Address)
If celda.Value = valor_buscado.Value Then nuevaocurrencia
= nuevaocurrencia + 1
If nuevaocurrencia = ocurrencia Then
busquedafinal = celda.Offset(0, columna - 1).Value
Exit For
End If
Next
buscarvbm = busquedafinal

End Function

Saludos,

Benito Merino

Tengo una fórmula con la que mediante BUSCARV quiero


recuperar un dato de un
rango Ax:By. En la columna A tengo varios grupos de datos


iguales, quiero
que me recupere los de la columna B. Por lo general


BUSCARV si encuentra
varios datos iguales recupera el primero de la lista, yo


quiero que me
recupere el primero de la lista y poniendo la misma


fórmula abajo luego me
recupere el segundo y así sucesivamente. Mirad si alguna


sabeis como hacer
esto.
p.e. BUSCARV("b";{"a";"b";"b"}/{"1";"2";"0"};2;FALSO) ,me


devuelve "2"

pues yo quiero que si en la celda de abajo pongo la misma


fórmula me
devuelva "0"

Muchas Gracias



.

Respuesta Responder a este mensaje
#2 Fernando Arroyo
15/01/2004 - 17:09 | Informe spam
También puedes usar una fórmula matricial. Dado que en el ejemplo que pones no está claro si necesitas buscar en vertical o en horizontal, vamos a suponer que es en vertical y que el rango de datos es A1:B10, algo como:

a 1
b 2
c 3
b 4
.
.
.

Para saber el valor de la columna B para la primera vez que aparece "b" en la columna A, la fórmula sería:

=INDICE(A$1:B$10;K.ESIMO.MENOR(SI(A$1:A$10="b";FILA(A$1:A$10)-FILA(A$1)+1;FILA(A$10)+1);FILA());2)

teniendo en cuenta que es una fórmula matricial (hay que introducirla presionando Control + Mayúsculas + Entrada al mismo tiempo). Esta fórmula tendrías que ponerla en una celda de la fila 1. La misma fórmula copiada en las filas siguientes mostrará el valor de la 2ª vez que aparece "b", de la 3ª, etc. En realidad, las fórmulas podrían ir en cualquier sitio, pero entonces habría que modificarlas.

Si se intenta saber por ejemplo el valor de la 4ª vez que aparece "b" pero sólo lo hace 3 veces, se obtiene el error #¡REF!

Un saludo.


Fernando Arroyo
MS MVP - Excel



"Miguel" escribió en el mensaje news:c0uNb.2634388$
Tengo una fórmula con la que mediante BUSCARV quiero recuperar un dato de un
rango Ax:By. En la columna A tengo varios grupos de datos iguales, quiero
que me recupere los de la columna B. Por lo general BUSCARV si encuentra
varios datos iguales recupera el primero de la lista, yo quiero que me
recupere el primero de la lista y poniendo la misma fórmula abajo luego me
recupere el segundo y así sucesivamente. Mirad si alguna sabeis como hacer
esto.
p.e. BUSCARV("b";{"a";"b";"b"}/{"1";"2";"0"};2;FALSO) ,me devuelve "2"

pues yo quiero que si en la celda de abajo pongo la misma fórmula me
devuelva "0"

Muchas Gracias



Respuesta Responder a este mensaje
#3 Miguel
15/01/2004 - 18:34 | Informe spam
Muchas gracias, voy a ver si consigo encajarla en mi hoja

"Benito Merino" escribió en el mensaje
news:09de01c3db6e$0e8fdaa0$
Hola Miguel

He preparado una función que creo que te irá bien.

Function buscarvbm(valor_buscado As Range, rango_consulta
As Range, area_datos As Range, columna As Integer)
' "valor_buscado" es la celda de la que queremos devolver
el valor
' "rango_consulta" es el área donde esta incluido el
valor_buscado donde observaremos el número de ocurrencia
' "area_datos" es la matriz similar a la de buscarv
' "columnas" es el indicador de columnas, igual que en
buscarv

Dim celdainicial As Range
For Each c In rango_consulta
If c.Value = valor_buscado.Value Then ocurrencia ocurrencia + 1
If c.Address = valor_buscado.Address Then Exit For
Next

columna_inicio = area_datos.Column
fila_inicio = area_datos.Row
numerofilas = area_datos.Rows.Count
For Each celda In Range(Cells(fila_inicio,
columna_inicio).Address & ":" & Cells(fila_inicio +
numerofilas - 1, columna_inicio).Address)
If celda.Value = valor_buscado.Value Then nuevaocurrencia
= nuevaocurrencia + 1
If nuevaocurrencia = ocurrencia Then
busquedafinal = celda.Offset(0, columna - 1).Value
Exit For
End If
Next
buscarvbm = busquedafinal

End Function

Saludos,

Benito Merino

Tengo una fórmula con la que mediante BUSCARV quiero


recuperar un dato de un
rango Ax:By. En la columna A tengo varios grupos de datos


iguales, quiero
que me recupere los de la columna B. Por lo general


BUSCARV si encuentra
varios datos iguales recupera el primero de la lista, yo


quiero que me
recupere el primero de la lista y poniendo la misma


fórmula abajo luego me
recupere el segundo y así sucesivamente. Mirad si alguna


sabeis como hacer
esto.
p.e. BUSCARV("b";{"a";"b";"b"}/{"1";"2";"0"};2;FALSO) ,me


devuelve "2"

pues yo quiero que si en la celda de abajo pongo la misma


fórmula me
devuelva "0"

Muchas Gracias



.

Respuesta Responder a este mensaje
#4 Miguel
15/01/2004 - 19:26 | Informe spam
No consigo que me funcione, de todas formas gracias, yo creo que la hoja que
tengo es muy enrebesada y así y con mensajes es muy dificil esplicaros lo
que quiero hacer y contra lo que me enfrento (me crea referencias circulares
y cosas por el estilo por que la celda que me devuelve el valor se encuentra
en la misma matriz que lo pide). Lo que estoy intentando conseguir es lo
siguiente: Quiero crearme una hoja de datos para hacer presupuestos de
proyectos arquitectónicos y quiero que cada vez que un conceto se me repite
me aparezca el descompuesto inmediatamente. Tengo una columna donde está el
código de la partida, la siguiente es el texto que corresponde a ese código
y en la siguiente y debajo se encuentra lo que se llama el descompuesto.
Para quien conozca programas de mediciones es algo parecido al PRESTO. Es
bastante complicado. No os pido mas que demasiado habeis hecho. De todas
formas con todo lo que me habeis explicado he aprendido un montón, intentare
con lo nuevo que he aprendido depurar la hoja y haber si lo consigo. Cuando
lo tenga ya os cuento. Muchas gracias.

P.D.: Fernando, en tu fórmula me da error tipo #VALOR creo que es que no
reconoce el 'A$1:A$10="b"'
"Fernando Arroyo" escribió en el mensaje
news:
También puedes usar una fórmula matricial. Dado que en el ejemplo que pones
no está claro si necesitas buscar en vertical o en horizontal, vamos a
suponer que es en vertical y que el rango de datos es A1:B10, algo como:

a 1
b 2
c 3
b 4
.
.
.

Para saber el valor de la columna B para la primera vez que aparece "b" en
la columna A, la fórmula sería:

=INDICE(A$1:B$10;K.ESIMO.MENOR(SI(A$1:A$10="b";FILA(A$1:A$10)-FILA(A$1)+1;FI
LA(A$10)+1);FILA());2)

teniendo en cuenta que es una fórmula matricial (hay que introducirla
presionando Control + Mayúsculas + Entrada al mismo tiempo). Esta fórmula
tendrías que ponerla en una celda de la fila 1. La misma fórmula copiada en
las filas siguientes mostrará el valor de la 2ª vez que aparece "b", de la
3ª, etc. En realidad, las fórmulas podrían ir en cualquier sitio, pero
entonces habría que modificarlas.

Si se intenta saber por ejemplo el valor de la 4ª vez que aparece "b" pero
sólo lo hace 3 veces, se obtiene el error #¡REF!

Un saludo.


Fernando Arroyo
MS MVP - Excel



"Miguel" escribió en el mensaje
news:c0uNb.2634388$
Tengo una fórmula con la que mediante BUSCARV quiero recuperar un dato de


un
rango Ax:By. En la columna A tengo varios grupos de datos iguales, quiero
que me recupere los de la columna B. Por lo general BUSCARV si encuentra
varios datos iguales recupera el primero de la lista, yo quiero que me
recupere el primero de la lista y poniendo la misma fórmula abajo luego me
recupere el segundo y así sucesivamente. Mirad si alguna sabeis como hacer
esto.
p.e. BUSCARV("b";{"a";"b";"b"}/{"1";"2";"0"};2;FALSO) ,me devuelve "2"

pues yo quiero que si en la celda de abajo pongo la misma fórmula me
devuelva "0"

Muchas Gracias



Respuesta Responder a este mensaje
#5 Fernando Arroyo
15/01/2004 - 20:45 | Informe spam
"Miguel" escribió en el mensaje news:JXANb.2643281$
No consigo que me funcione, de todas formas gracias, yo creo que la hoja que
tengo es muy enrebesada y así y con mensajes es muy dificil esplicaros lo
que quiero hacer y contra lo que me enfrento (me crea referencias circulares
y cosas por el estilo por que la celda que me devuelve el valor se encuentra
en la misma matriz que lo pide). Lo que estoy intentando conseguir es lo
siguiente: Quiero crearme una hoja de datos para hacer presupuestos de
proyectos arquitectónicos y quiero que cada vez que un conceto se me repite
me aparezca el descompuesto inmediatamente. Tengo una columna donde está el
código de la partida, la siguiente es el texto que corresponde a ese código
y en la siguiente y debajo se encuentra lo que se llama el descompuesto.
Para quien conozca programas de mediciones es algo parecido al PRESTO. Es
bastante complicado. No os pido mas que demasiado habeis hecho. De todas
formas con todo lo que me habeis explicado he aprendido un montón, intentare
con lo nuevo que he aprendido depurar la hoja y haber si lo consigo. Cuando
lo tenga ya os cuento. Muchas gracias.

P.D.: Fernando, en tu fórmula me da error tipo #VALOR creo que es que no
reconoce el 'A$1:A$10="b"'



No te debería dar error. Pruébalo en una hoja nueva y en blanco, o si estás interesado dímelo y te envío un libro con la fórmula operativa.
Un saludo.


Fernando Arroyo
MS MVP - Excel
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida