Buscar todas las coincidencias de texto en rango de otro libro cerrado

02/12/2006 - 21:10 por Brel | Informe spam
Hola grupo,
antes que nada permitirme que indique a Hector que ya funcionó su última
propuesta ya que por problemas de viajes laborales no lo he podido hacer.
Y ahora, al tajo...
Se trata, en resumen , de lo que hace un 'BuscarV' pero para cuando -pueden
existir más coincidencias, el tipico siguiente de un formulario-, bajo estos
preceptos:
Texto a buscar situado en Libro 'Dpto'. Hoja 'Especial' -tributo a Hector
siguiendo sus recomendaciones para que nadie lo vea-.Celda 'B81'
(por si a alguien le sirve el resultado de este se muestra en celda B1 que
tiene la siguiente formula:
=SI($B$81="";"";SI(ESNUMERO(COINCIDIR("*"&$B$81&"*";'D:\[Tablas.xls]B'!$B$2:$B$5000;0));BUSCARV("*"&$B$81&"*";'D:\[Tablas.xls]B'!$B$2:$B$5000;1;0);0))
Detalle: Quise traerme los datos del libro 'Tablas' por codigo sin pasarlos
a celdas de esta hoja 'Especial' y se eternizaba, o no di con el codigo
correcto, claro. Lo digo porque luego vuelco los datos a otras celdas si
estoy conforme con las modificaciones, y quiero volver a guardarlos en
'Tablas', pero tambien estoy atascado en eso que dejo para cuando tenga este
tema resuelto. Cierro parentesis)

Claro, cuando hay más coincidencias esto no sirve (tampoco puedo hacer un
formulario de la base porque Excel se queja de demasiados datos)
La base -aunque esta claro en la formula descrita- es: Libro 'Tablas'.Hoja
'B'. Rango 'B2:B5000' (o podriamos decir 'B:B')
[Ambos ficheros estan en la misma ruta]
Con esta formula se cuantas coincidencias hay:
=SUMA(SI(ESERROR(ENCONTRAR(B81;'D:\[Tablas.xls]B'!$B$3:$B$5000));0;1))
[la formula es matricial, terminar con control+mayusculas+enter]

Lo que quisiera es que me pusiera en el libro 'Dpto'.Hoja 'Especial'.Rango
'B84:Bxx' donde estan estas coincidencias:
si son 2, que B84=Fila 2600 y B85=Fila 3001, por ejemplo...
De forma que con un click de un boton de comando 'sig' del formulario
'Localizador' -es desde donde hago todo- pudiera traerme los datos de la
siguiente coincidencia y este no estuviera habilitado cuando no hubiera
coincidencias o estuvieramos en la ultima. [el tipico 'siguiente' de un
formulario]

Detalle: el libro 'Tablas' esta cerrado y con contraseñas
apertura/escritura -sobra decir que son conocidas por mi.

Perdon por el ladrillo, a veces por intentar explicar uno se lia, y seguro
me he dejado mas de un detalle interesante/necesario para poder darme ideas.
Gracias de cualquier forma.
Brel

Preguntas similare

Leer las respuestas

#6 Brel
03/12/2006 - 13:43 | Informe spam
Hola Héctor y grupo,
acabo de darme cuenta de un error de planteamiento por no explicarme...
Se trata de buscar una parte del texto dentro de una rango: siguiendo tu
ejemplo imagina que lo que buscamos es "te 1" --> realmente '*te 1*'
bajo este argumento tendríamos que localizar en tu ejemplo 12 coincidencias:
Dato 10 (3 veces) y Dato 11 a Dato 19 (9 veces).

A esto añadir mi último comentario sobre la posibilidad de evitar 78
columnas.
Gracias nuevamente.
Brel
"Brel" escribió en el mensaje
news:
Hola Héctor,
Una salvedad... si sabemos que hay x registros (pongamos 3 en tu caso del
cliente 10) no sería más fácil identificar en qué filas están los
repetidos y luego sacar los datos con BuscarV directamente a esa fila? Si
esto es posible, con una única columna 'Especial(2)' Columna 'B' valdría
no?
Incluso aunque tengamos los 5000 registros de B, si en a3, a4!, a51
(corresponde a las filas en que aparece Cliente 10) no se podría montar
los necesarios BuscarV a cada click del botón 'sig' por código? Así nos
ahorraríamos 78 columnas (B:BC) en Especial.(2) Aunque fuera (en hoja
Especial(2)) con un formato condicional vinculado al valor de 'A1' para
todo la columna 'B' se podrían identificar por código las celdas en letra
roja (x. e.) y averiguar así su fila, no?

No se si me explico. Quizás ante mi falta de perspectiva hago sencillo un
problema complejo...
Saludos.
Brel

"Héctor Miguel" escribió en el mensaje
news:
hola, ?

1) 'asumo' que ya tienes resuelto el hecho de que al mantener cerrado [y
con claves contra apertura y escritura] tu libro 'Tablas.xls'
al abrir el otro libro 'Dpto' [SIN abrir el 'de base']... -> te
solicite la clave para poder actualizar los vinculos -?-
[o incluso, cuando entras/editas -nuevas- fornulas con vinculos al
libro que permanece cerrado] ;)

2) si necesitas 'rescatar'... dos [o mas] posibles 'coinciencias' de un
mismo dato [ya NO por macros sino con el procedimiento anterior]...
para poder 'averiguar' en cual/es otra/s filas existe/n otro/s dato/s
coincidente/s -> con el unico-mismo dato que se busca...
se necesita aplicar formulas 'matriciales' [ya sabes, de las que se
'terminan' con crl+mayus+enter] para estar 'en condiciones de'... ;)

3) para poder 'devolver' datos 'actualizados' [en caso de modificaciones]
hacia el libro 'de origen' [cerrado y con contrase#as]...
[supongo que] no podras 'escapar' de la 'necesidad' de -> irlo -?-

4) 'suponiendo' que tu libro 'base' [tablas] contiene los datos 'en
horizontal' [por columnas] y los registros en filas...
y que a tu libro 'destino' [dpto] lo 'conviertes' a vertical [columnas
a filas]...
te prepare un 'ejemplo' [3 'variantes'] PERO... unicamente con 40
filas/registros :-((
[obviamente] no tengo idea de como podria 'comportarse' con 5000 filas
y [sobre todo] en un ambiente de redes y 'compartido' .-((

-> me puedes confirmar alguna direccion para hacertelo llegar ?

5) [obviamente] no lo he 'preparado' con alguna prevencion/correccion de
posibles 'errores' [p.e. por no haber coincidencias]
pero creo que podras ingeniartelas una vez que lo estudies ;)

saludos,
hector.

__ 1 __
tal y como comentaba en el anterior post vincule 78 celdas del libro
'Dpto'.Hoja 'Especial'.Rango 'B1:B78'
con el libro 'Tablas'.Hoja 'B' por medio de BuscarV.
(son los 78 datos asignados a cada cliente [una fila, en la que
encuentra coincidencia con el cliente en columna 'B']
y lo hace sin problemas manteniendo el libro 'Tablas' cerrado y con
contrase#as):


__ 2 __
Lo que busco es que si hay mas coincidencias:
=SUMA(SI(ESERROR(ENCONTRAR(B81;'D:\[Tablas.xls]B'!$B$3:$B$5000));0;1))
encontrar la forma de que por un boton de comando 'sig' del formulario
'Localizador'
traerme al mismo sitio [libro 'Dpto'.Hoja 'Especial'.Rango 'B1:B78'] la
siguiente coincidencia encontrada.
Hasta aqui todo lo hado sin abrir ni desencriptar la base y es rapido
(*)


__ 3 __
otra cosa es que -intuyo- debere hacerlo para devolver datos a esa base,
cuando haya modificaciones, claro.


__ 4 __
Estructura de ambos libros, en cuanto a las Hojas implicadas:
(*) Insisto que intente hacer todo por codigo sin meter datos a ninguna
hoja y se ralentizaba tanto -mi codigo-
que opte por tu solucion de una hoja oculta y accesible por contrase#a,
no era mi idea pero si una solucion factible y rapida.
Libro 'Tablas'.Hoja 'B' --> Estructura:
Fila 1 Titulos: Nº / Cliente / CIF / Expdte / Gestor / ... (misma
estructura en fila)
Libro 'Dpto'.Hoja 'Especial' --> Estructura:
Columna A Titulos: Nº / Cliente / CIF / Expdte / Gestor / ...
Columna B --> Deposito los datos extraidos de la base coincidentes
'B1:B78' (misma estructura en columna) / B81 es el TextBox0 del
Formulario 'Localizador'
-lo que tecleo para buscar un cliente por nombre, ordenado en la base
alfabeticamente.


__ 5 __
No tengo forma de acceder a los atributos de los ficheros, todo esto lo
situo en un directorio compartido del servidor
que funciona como 'servidor web' con todas las limitaciones que lleva
por politica de 'seguridad industrial'...
no se permite 2 accesos simultaneos a un fichero como escritura aunque
se trate de un libro Excel compartido
-te lo juro que es real, he dejado varias neuronas en ese camino sin
conseguirlo, es una multinacional y...bueno, asi estan las cosas:
Varias personas acceden como lectura pero solo una -yo- puede
actualizar.
Si en 'Tablas' existe una fila de titulos y una columna 'A' que es el nº
del cliente no es sino por no volverme loco al actualizar
si logro actualizar desde este formulario obviamente sobrarian -hasta
ahora actualizo directamente en la base.
De nuevo perdon, por extenderme en sin duda temas que no resuelven el
problema suscitado, aunque si aclaren las circunstancias de trabajo.








Respuesta Responder a este mensaje
#7 Brel
03/12/2006 - 13:57 | Informe spam
Estoy dormido...
donde pone Dato debería poner Cliente...
Brel
"Brel" escribió en el mensaje
news:
Hola Héctor y grupo,
acabo de darme cuenta de un error de planteamiento por no explicarme...
Se trata de buscar una parte del texto dentro de una rango: siguiendo tu
ejemplo imagina que lo que buscamos es "te 1" --> realmente '*te 1*'
bajo este argumento tendríamos que localizar en tu ejemplo 12
coincidencias: Dato 10 (3 veces) y Dato 11 a Dato 19 (9 veces).

A esto añadir mi último comentario sobre la posibilidad de evitar 78
columnas.
Gracias nuevamente.
Brel
"Brel" escribió en el mensaje
news:
Hola Héctor,
Una salvedad... si sabemos que hay x registros (pongamos 3 en tu caso del
cliente 10) no sería más fácil identificar en qué filas están los
repetidos y luego sacar los datos con BuscarV directamente a esa fila? Si
esto es posible, con una única columna 'Especial(2)' Columna 'B' valdría
no?
Incluso aunque tengamos los 5000 registros de B, si en a3, a4!,
a51 (corresponde a las filas en que aparece Cliente 10) no se podría
montar los necesarios BuscarV a cada click del botón 'sig' por código?
Así nos ahorraríamos 78 columnas (B:BC) en Especial.(2) Aunque fuera (en
hoja Especial(2)) con un formato condicional vinculado al valor de 'A1'
para todo la columna 'B' se podrían identificar por código las celdas en
letra roja (x. e.) y averiguar así su fila, no?

No se si me explico. Quizás ante mi falta de perspectiva hago sencillo un
problema complejo...
Saludos.
Brel

"Héctor Miguel" escribió en el mensaje
news:
hola, ?

1) 'asumo' que ya tienes resuelto el hecho de que al mantener cerrado [y
con claves contra apertura y escritura] tu libro 'Tablas.xls'
al abrir el otro libro 'Dpto' [SIN abrir el 'de base']... -> te
solicite la clave para poder actualizar los vinculos -?-
[o incluso, cuando entras/editas -nuevas- fornulas con vinculos al
libro que permanece cerrado] ;)

2) si necesitas 'rescatar'... dos [o mas] posibles 'coinciencias' de un
mismo dato [ya NO por macros sino con el procedimiento anterior]...
para poder 'averiguar' en cual/es otra/s filas existe/n otro/s dato/s
coincidente/s -> con el unico-mismo dato que se busca...
se necesita aplicar formulas 'matriciales' [ya sabes, de las que se
'terminan' con crl+mayus+enter] para estar 'en condiciones de'... ;)

3) para poder 'devolver' datos 'actualizados' [en caso de
modificaciones] hacia el libro 'de origen' [cerrado y con
contrase#as]...
[supongo que] no podras 'escapar' de la 'necesidad' de -> irlo -?-

4) 'suponiendo' que tu libro 'base' [tablas] contiene los datos 'en
horizontal' [por columnas] y los registros en filas...
y que a tu libro 'destino' [dpto] lo 'conviertes' a vertical
[columnas a filas]...
te prepare un 'ejemplo' [3 'variantes'] PERO... unicamente con 40
filas/registros :-((
[obviamente] no tengo idea de como podria 'comportarse' con 5000
filas y [sobre todo] en un ambiente de redes y 'compartido' .-((

-> me puedes confirmar alguna direccion para hacertelo llegar ?

5) [obviamente] no lo he 'preparado' con alguna prevencion/correccion de
posibles 'errores' [p.e. por no haber coincidencias]
pero creo que podras ingeniartelas una vez que lo estudies ;)

saludos,
hector.

__ 1 __
tal y como comentaba en el anterior post vincule 78 celdas del libro
'Dpto'.Hoja 'Especial'.Rango 'B1:B78'
con el libro 'Tablas'.Hoja 'B' por medio de BuscarV.
(son los 78 datos asignados a cada cliente [una fila, en la que
encuentra coincidencia con el cliente en columna 'B']
y lo hace sin problemas manteniendo el libro 'Tablas' cerrado y con
contrase#as):


__ 2 __
Lo que busco es que si hay mas coincidencias:
=SUMA(SI(ESERROR(ENCONTRAR(B81;'D:\[Tablas.xls]B'!$B$3:$B$5000));0;1))
encontrar la forma de que por un boton de comando 'sig' del formulario
'Localizador'
traerme al mismo sitio [libro 'Dpto'.Hoja 'Especial'.Rango 'B1:B78'] la
siguiente coincidencia encontrada.
Hasta aqui todo lo hado sin abrir ni desencriptar la base y es rapido
(*)


__ 3 __
otra cosa es que -intuyo- debere hacerlo para devolver datos a esa
base, cuando haya modificaciones, claro.


__ 4 __
Estructura de ambos libros, en cuanto a las Hojas implicadas:
(*) Insisto que intente hacer todo por codigo sin meter datos a ninguna
hoja y se ralentizaba tanto -mi codigo-
que opte por tu solucion de una hoja oculta y accesible por contrase#a,
no era mi idea pero si una solucion factible y rapida.
Libro 'Tablas'.Hoja 'B' --> Estructura:
Fila 1 Titulos: Nº / Cliente / CIF / Expdte / Gestor / ... (misma
estructura en fila)
Libro 'Dpto'.Hoja 'Especial' --> Estructura:
Columna A Titulos: Nº / Cliente / CIF / Expdte / Gestor / ...
Columna B --> Deposito los datos extraidos de la base coincidentes
'B1:B78' (misma estructura en columna) / B81 es el TextBox0 del
Formulario 'Localizador'
-lo que tecleo para buscar un cliente por nombre, ordenado en la base
alfabeticamente.


__ 5 __
No tengo forma de acceder a los atributos de los ficheros, todo esto lo
situo en un directorio compartido del servidor
que funciona como 'servidor web' con todas las limitaciones que lleva
por politica de 'seguridad industrial'...
no se permite 2 accesos simultaneos a un fichero como escritura aunque
se trate de un libro Excel compartido
-te lo juro que es real, he dejado varias neuronas en ese camino sin
conseguirlo, es una multinacional y...bueno, asi estan las cosas:
Varias personas acceden como lectura pero solo una -yo- puede
actualizar.
Si en 'Tablas' existe una fila de titulos y una columna 'A' que es el
nº del cliente no es sino por no volverme loco al actualizar
si logro actualizar desde este formulario obviamente sobrarian -hasta
ahora actualizo directamente en la base.
De nuevo perdon, por extenderme en sin duda temas que no resuelven el
problema suscitado, aunque si aclaren las circunstancias de trabajo.












Respuesta Responder a este mensaje
#8 Héctor Miguel
03/12/2006 - 22:51 | Informe spam
hola, Brel !

[primero]: dejame 'recordarte' que 'desde este lado' [del mensaje] no se ha podido 'ver' cual es el 'arreglo' de tus datos :))

[segundo]: todavia no se alcanza a apreciar que 'relacion' existe entre los datos que expones [p.e.]
a) las 5000 filas donde se busca algun dato: -> 'D:\[Tablas.xls]B'!$B$2:$B$5000
b) las 78 celdas del libro 'Dpto' Hoja 'Especial' Rango 'B1:B78' que vinculaste con el libro 'Tablas' Hoja 'B' por medio de BuscarV

[tercero]: por ello es que te comentaba antes de enviarte un ejemplo [en el post anterior] lo siguiente:
4) 'suponiendo' que tu libro 'base' [tablas] contiene los datos 'en horizontal' [por columnas] y los registros en filas...
y que a tu libro 'destino' [dpto] lo 'conviertes' a vertical [columnas a filas]...



[cuarto]: por lo mismo... 'mi' supuesto fue que las 78 celdas vinculadas 'venian' de 78 columnas en el libro 'de origen' -?-
-> no alcance a 'ver' otra posible relacion entre 5000 filas en un libro 'vinculadas' a 78 en otro -???-

[ahora]... 'regresando' a las exposiciones que haces en las 3 consultas previas/ultimas/...
__ 1 __
... si sabemos que hay x registros (pongamos 3 en tu caso del cliente 10)
no seria más facil identificar en que filas están los repetidos y luego sacar los datos con BuscarV directamente a esa fila?
... aunque tengamos los 5000 registros de B, si en a3, a4!, a51 (corresponde a las filas en que aparece Cliente 10)
no se podria montar los necesarios BuscarV a cada click del boton 'sig' por codigo?



1) la funcion buscarv(...), hasta donde se... SOLO puede devolver UNA coincidencia [si existe]...
si existen dos [o mas]... buscarv(...) ya no continua con una busqueda mas... 'profunda/exhaustiva/...' :-((
-> para simular un 'For...Next' de vba por funciones de hoja de calculo, [generalmente] se usa indice() y coincidir() incluso desref()

__ 2 __
... Se trata de buscar una parte del texto dentro de una rango: siguiendo tu ejemplo
imagina que lo que buscamos es "te 1" --> realmente '*te 1*' bajo este argumento
tendriamos que localizar en tu ejemplo 12 coincidencias: Dato 10 (3 veces) y Dato 11 a Dato 19 (9 veces).



2) prueba adaptando dicha necesidad a las funciones utilizadas en el libro con los ejemplos :D

__ 3 __
... Estoy dormido... donde pone Dato debería poner Cliente..



3) el ejemplo 'se trae' dato... porque es lo que existe en la columna que se extrae...
te recuerdo que cuando los datos de una propuesta han tenido que ser supuestos/imaginados/inventados/... por quien propone...
le corresponde a quien consulta hacer las adaptaciones que no fueron expuestas en la consulta :))

[en resumen]: para 'encontrar' las filas donde existen coincidencias...
a) revisa la parte de la formula donde esta la funcion k.esimo.menor que es la que detecta la fila(...)
b) recuerda que es una formula 'matricial' :-((
c) no olvides que el ejemplo usa -solamente- 39 filas... si vas a incluir las 5000 de tu ejemplo/necesidad/... original...
[seguramente] la rapidez en el re/calculo de las [78 ?] formulas... no va a ser 'algo esperado' :-((

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#9 Brel
04/12/2006 - 19:30 | Informe spam
Hola Héctor y Grupo,
ante todo humildemente perdón por suponer -y presuponer, y 'obligarte' a
hacer lo mismo...sorry.

[segundo] Las 5000 filas en 'Tablas!B': Cada fila corresponde a un cliente,
no hay repeticiones y está ordenada alfabéticamente.
cada cliente tiene 78 datos (columnas). x.e. Fila 6 sería de B6: ...BC6 (el
resto son cálculos en base a estos datos extraídos) los datos a traerme:
B:Empresa; C: CIF

Cuando 'cojo' un cliente en 'Dpto!Especial me traigo sus datos... de ahí que
haya una columna (B) con 78 datos que por funciones están vinculadas:
B1: Empresa. B2: Cif. y en B80: lo que escribo y a partir de lo que se
realiza la búsqueda: al encontrar la primera coincidencia B1 saca el dato
(Empresa) y el resto de datos los vinculo por funciones en referencia a este
B1 que es un dato único con lo que BuscarV funciona sin problemasaunque
sería más lógico usar el CIF que sí es seguro es único, pero bueno, la base
está así, al menos de momento.

Pero el dato tecleado (proviene del textbox0 del formulario Localizador)
puede encontrarse en 'x' empresas (imagina que pongo en B80 'ab' y en
Tablas!B existe un "ab de componentes eléctricos", un "ab de
comunicaciones", un "ab de servicios"... en definitiva distintas 'posibles'
coincidencias que trato de localizar.
Siguiendo este ejemplo: la 1ª vez obtendría "ab de componentes eléctricos" y
extraería todos sus datos.
El siguiente no lo encontrara con un BuscarV en '[Tablas]B!B2:B5000', pero
si se que hay más coincidencias y que la 1ª está en fila 6, si podría lanzar
un BuscarV a '[Tablas]B!B7:B5000' y me traería la siguiente coincidencia,
no? o si se puede llegar a saber que la 2ª coincidencia está en fila 17, la
3ª en fila 160... si podría lanzar los BuscarV a esa fila concreta y
encontraría el dato, no?... Es todo teórico, claro.

[tercero] Por eso no harían falta 78 columnas, con una vale. Si acaso otras
celdas donde depositar las filas de coincidencia.

[Hasta aquí las suposiciones 'obligadas por mi carencia de datos...]

___1___ Mis intentos con esas funciones han fracasado, creo que no he sido
capaz de encontrarles la 'lógica' que sin duda tienen, ojo.
___2___ Repasaré de nuevo, y más concienzudamente tu ejemplo... Según
detectaba cosas -que no había comentado, etc- enviaba mensajes. La ansiedad
me pudo.
___3___ Sorry de nuevo.
[en resumen]Creo que con las explicaciones de ahora se simplifica el modelo,
espero. No serían 5000 matriciales a mi modo de ver si sé que la 1ª
coincidencia está en la fila 6. Para la 2ª deberé lanzar un BuscarV a
B7:B5000, pero intuyo debería depositar esos 78 datos en otra columna...y
así con cada posible coincidencia... creo que no es excesivamente
practico... salvo que las funciones de 'Especial!B1:B78' se entreguen por
código a esas celdas asignándoles cada vez el valor que haya en otras
celdas:
A90: 17 (2ª coincidencia en fila 17)
A91: 160 (3ª coincidencia en fila 160)
.
y por código trasladara las fórmulas que tengo en B1:B78 adecuándolas al
valor que debe capturar BuscarV de comienzo de fila de búsqueda... Pero
transcribir esas formulas a VBA...buf y luego con un Width...End Width para
2ª coincidencia coge A90, para 3ª: A91... o por Select Case... no sé.

Espero haberte aclarado algo y dejar de 'obligarte a suponer'. Gracias.
Brel

"Héctor Miguel" escribió en el mensaje
news:
hola, Brel !

[primero]: dejame 'recordarte' que 'desde este lado' [del mensaje] no se
ha podido 'ver' cual es el 'arreglo' de tus datos :))

[segundo]: todavia no se alcanza a apreciar que 'relacion' existe entre
los datos que expones [p.e.]
a) las 5000 filas donde se busca algun dato: ->
'D:\[Tablas.xls]B'!$B$2:$B$5000
b) las 78 celdas del libro 'Dpto' Hoja 'Especial' Rango 'B1:B78' que
vinculaste con el libro 'Tablas' Hoja 'B' por medio de BuscarV

[tercero]: por ello es que te comentaba antes de enviarte un ejemplo [en
el post anterior] lo siguiente:
4) 'suponiendo' que tu libro 'base' [tablas] contiene los datos 'en
horizontal' [por columnas] y los registros en filas...
y que a tu libro 'destino' [dpto] lo 'conviertes' a vertical
[columnas a filas]...



[cuarto]: por lo mismo... 'mi' supuesto fue que las 78 celdas vinculadas
'venian' de 78 columnas en el libro 'de origen' -?-
-> no alcance a 'ver' otra posible relacion entre 5000 filas en un libro
'vinculadas' a 78 en otro -???-

[ahora]... 'regresando' a las exposiciones que haces en las 3 consultas
previas/ultimas/...
__ 1 __
... si sabemos que hay x registros (pongamos 3 en tu caso del cliente 10)
no seria más facil identificar en que filas están los repetidos y luego
sacar los datos con BuscarV directamente a esa fila?
... aunque tengamos los 5000 registros de B, si en a3, a4!, a51
(corresponde a las filas en que aparece Cliente 10)
no se podria montar los necesarios BuscarV a cada click del boton 'sig'
por codigo?



1) la funcion buscarv(...), hasta donde se... SOLO puede devolver UNA
coincidencia [si existe]...
si existen dos [o mas]... buscarv(...) ya no continua con una busqueda
mas... 'profunda/exhaustiva/...' :-((
-> para simular un 'For...Next' de vba por funciones de hoja de calculo,
[generalmente] se usa indice() y coincidir() incluso desref()

__ 2 __
... Se trata de buscar una parte del texto dentro de una rango: siguiendo
tu ejemplo
imagina que lo que buscamos es "te 1" --> realmente '*te 1*' bajo este
argumento
tendriamos que localizar en tu ejemplo 12 coincidencias: Dato 10 (3
veces) y Dato 11 a Dato 19 (9 veces).



2) prueba adaptando dicha necesidad a las funciones utilizadas en el libro
con los ejemplos :D

__ 3 __
... Estoy dormido... donde pone Dato debería poner Cliente..



3) el ejemplo 'se trae' dato... porque es lo que existe en la columna que
se extrae...
te recuerdo que cuando los datos de una propuesta han tenido que ser
supuestos/imaginados/inventados/... por quien propone...
le corresponde a quien consulta hacer las adaptaciones que no fueron
expuestas en la consulta :))

[en resumen]: para 'encontrar' las filas donde existen coincidencias...
a) revisa la parte de la formula donde esta la funcion k.esimo.menor que
es la que detecta la fila(...)
b) recuerda que es una formula 'matricial' :-((
c) no olvides que el ejemplo usa -solamente- 39 filas... si vas a incluir
las 5000 de tu ejemplo/necesidad/... original...
[seguramente] la rapidez en el re/calculo de las [78 ?] formulas... no
va a ser 'algo esperado' :-((

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Respuesta Responder a este mensaje
#10 Héctor Miguel
05/12/2006 - 06:42 | Informe spam
hola, Brel !

primero que todo... no me 'incomoda' el 'tener que' pre/suponer lo que no se comento en la consulta...
[aunque no lo parezca, te puedo asegurar que me gusta -o al menos intento- 'hacerle al adivino'] :))

me voy a 'tener que' esperar a que hagas un analisis mas 'profundo' del archivo que te envie... ya que [segun yo]...
a) las 78 columnas [del primer archivo 'tablas'] quedaron 'bien supuestas' en el ejemplo enviado [segun 'confirmas' en]...
___
[segundo] Las 5000 filas en 'Tablas!B': Cada fila corresponde a un cliente, no hay repeticiones y esta ordenada alfabeticamente.
cada cliente tiene 78 datos (columnas). x.e. Fila 6 sería de B6: ...BC6 (el resto son calculos en base a estos datos extraidos)
los datos a traerme:B:Empresa; C: CIF



b) la segunda 'asuncion' de que tales columnas las 'trasladabas' a filas [en el segundo archivo 'depto'] sigue bien 'supuesta' [segun]...
___
Cuando 'cojo' un cliente en 'Dpto!Especial me traigo sus datos... de ahi que haya una columna (B) con 78 datos
que por funciones estan vinculadas: B1: Empresa. B2: Cif. y en B80: lo que escribo y a partir de lo que se realiza la busqueda:
al encontrar la primera coincidencia B1 saca el dato (Empresa) y el resto de datos los vinculo por funciones en referencia a este B1
que es un dato unico con lo que BuscarV funciona sin problemas...



c) con relacion a utilizar buscarv para encontrar mas 'coincidencias' basadas en un mismo dato 'repetido' en la tabla donde se busca...
[tengo que insistir]... buscarv SOLO encuentra UNA coincidencia [si existe]... para segundas 'apariciones'... indice y coincidir ;)
___
Pero el dato tecleado (proviene del textbox0 del formulario Localizador) puede encontrarse en 'x' empresas
(imagina que pongo en B80 'ab' y en Tablas!B existe un "ab de componentes electricos", un "ab de comunicaciones", un "ab de servicios"...
en definitiva distintas 'posibles' coincidencias que trato de localizar.
Siguiendo este ejemplo: la 1ª vez obtendria "ab de componentes electricos" y extraeria todos sus datos.
El siguiente no lo encontrara con un BuscarV en '[Tablas]B!B2:B5000', pero si se que hay mas coincidencias y que la 1ª esta en fila 6
si podria lanzar un BuscarV a '[Tablas]B!B7:B5000' y me traeria la siguiente coincidencia, no?
o si se puede llegar a saber que la 2ª coincidencia esta en fila 17, la 3ª en fila 160...
si podria lanzar los BuscarV a esa fila concreta y encontraría el dato, no?... Es todo teorico, claro.



d) 'el resto' de esta re/consulta [me parece que] sigue quedado 'dentro' de los comentarios anteriores :D
-> solo re/confirmarte que no serian 5000 formulas matriciales, pero si unas cuantas con matrices de 5000 filas [cada una] :-(

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

[Hasta aqui las suposiciones 'obligadas por mi carencia de datos...]



___ el resto de esta re/consulta ___
___1___ Mis intentos con esas funciones han fracasado, creo que no he sido capaz de encontrarles la 'logica' que sin duda tienen, ojo.
___2___ Repasare de nuevo, y mas concienzudamente tu ejemplo... Segun detectaba cosas -que no habia comentado, etc- enviaba mensajes.
La ansiedad me pudo.
___3___ Sorry de nuevo.
[en resumen] Creo que con las explicaciones de ahora se simplifica el modelo, espero.
No serian 5000 matriciales a mi modo de ver si se que la 1ª coincidencia esta en la fila 6.
Para la 2ª debere lanzar un BuscarV a B7:B5000, pero intuyo deberia depositar esos 78 datos en otra columna...
y asi con cada posible coincidencia... creo que no es excesivamente practico...
salvo que las funciones de 'Especial!B1:B78' se entreguen por codigo a esas celdas asignandoles cada vez el valor que haya en otras celdas:
A90: 17 (2ª coincidencia en fila 17) A91: 160 (3ª coincidencia en fila 160) ...
y por codigo trasladara las formulas que tengo en B1:B78 adecuandolas al valor que debe capturar BuscarV de comienzo de fila de busqueda...
Pero transcribir esas formulas a VBA...buf y luego con un Width...End Width para 2ª coincidencia coge A90, para 3ª: A91...
o por Select Case... no se.
Espero haberte aclarado algo y dejar de 'obligarte a suponer'. Gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida