BUSQUEDA EN DOS HOJAS DE UN MISMO LIBRO

14/11/2005 - 22:32 por Marvin | Informe spam
GRACIAS KL, Y DISCULPA QUE HASTA AHORA TE RESPONDA, ESTUVE DE VACACIONES
TE RESPONDO TUS PREGUNTAS... GRCS



Hola Marvin,

Unas preguntas:
1) ?El archivo LIBRO.TXT me imagino debera estar abierto al ejecutar tu
codigo, no? De lo contrario habria que incluir la ruta completa en la
formula. ?Cual es la ruta?


LA RUTA PUEDE SER CUALQUIERA NO? O DEBEMOS ESPECIFICAR ALGUNA?


2) ?Si tal como sugiere la extension el archivo LIBRO.TXT es un archivo de
texto como puede tener mas de una hoja?


TIENES RAZON ME EQUIVOQUE, EL ARCHIVO ES XLS


3) ?La busqueda tiene que realizarse mediante formula necesariamente o se
puede hacerlo mediante instrucciones VBA devolviendo los resultados finales
como constantes?


DE PREFERENCIA POR FORMULA, PERO ES POSIBLE HACERLO POR INTRUCCIONES VB,
SERIA MÁS LENTO EL PROCESO NO?


4) ?Cual es el nombre de la segunda hoja del archivo LIBRO.TXT en la cual
hay que buscar?


DE IGUAL MANERA PUEDE SER CUALQUIERA, POR ESO NO HAY PROBLEMA


5) ?El rango de busqueda en la segunda hoja es el mismo que el de la
primera?


ES CORRECTO, CONTIENEN LOS MISMOS CAMPOS, DIGAMOS QUE ES UNA CONTINUACIÓN DE
LA PRIMER HOJA


6) ?Si el valor se encuentra en ambas hojas, cual tiene la preferencia?


NO PUEDE SER YA QUE COMO TE COMENTE EN LA PREGUNTA ANTERIOR, ES
CONTINUACIÓN, LOS VALORES DE BUSQUEDA NO SE REPITEN


7) ?Si el valor no se encuentra en ninguna de las tablas es necesario
devolver error o podria ser directamente el "No Existe" sin tener que
emplear la segunda formula?


ES CORRECTO, PUEDE SER DIRECTO O UTILIZAR LA SEGUNDA FORMULA..



De momento te paso tu codigo optimizado, pero sin incluir la posibilidad de
buscar en dos hojas (lo cual estara sujeto a las respuestas que me des a las
7 preguntas de arriba):

Dim rng As Range
Windows("RIH_" + Dia + "" + Mes + "" + Anio + "_R8_10DIG.xls").Activate
Set rng = Range(Cells(2, "G"), Cells(2, "G").End(xlDown))
rng.FormulaR1C1 = _
"=IF(AND(RC[-1]>=VLOOKUP(RC[-1],'[LIBRO.TXT]LIBRO'!R3C[-6]:R10110C[15],1,1),RC[-1]<=VLOOKUP(RC[-1],'[LIBRO.TXT]LIBRO'!R3C[-6]:R10110C[15],2,1)),VLOOKUP(RC[-1],'[LIBRO.TXT]LIBRO'!R3C1:R10110C22,3,1),""No
Existe"")"
rng.Offset(, 1).FormulaR1C1 ="=IF(ISERROR(RC[-1]),""No Existe"",RC[-1])"

Saludos,
KL


"Marvin" <Marvin@discussions.microsoft.com> wrote in message
news:6D8075F3-9B46-40D6-94D0-65EA430C1736@microsoft.com...
> QUE TAL GRUPO, ALGUIEN DE UDS SABE DE QUE MANERA PUEDO MODIFICAR MI
> INTRUCCION DE BUSQUEDA PARA QUE CON ESTA MISMA REALICE LA BUSQUEDA TOMANDO
> EN
> CUENTA DATOS DE DOS HOJASEN EL SIGUIENTE CODIGO REALIZO LA BUSQUEDA
> SOBRE
> UNA UNICA HOJA... PERO DEBIDO A LA CANTIDAD DE DATOS HE TENIDO QUE AGREGAR
> UNA SEGUNDA HOJA, ENTONCES QUIERO QUE UTILIZANDO LA MISMA INSTRUCCION ME
> BUSQUE UN DATOS PERO DENTRO DE DOS HOJAS... ES POSIBLE??
>
> Windows("RIH_" + Dia + "" + Mes + "" + Anio + "_R8_10DIG.xls").Activate
> Range("G2").Select
> ActiveCell.FormulaR1C1 = _
>
> "=+IF(AND(RC[-1]>=VLOOKUP(RC[-1],'[LIBRO.TXT]LIBRO'!R3C[-6]:R10110C[15],1,1),RC[-1]<=VLOOKUP(RC[-1],'[LIBRO.TXT]LIBRO'!R3C[-6]:R10110C[15],2,1)),VLOOKUP(RC[-1],'[LIBRO.TXT]LIBRO'!R3C1:R10110C22,3,1),""No
> Existe"")"
> Range("G2").Select
> Selection.Copy
> Range(Selection, Selection.End(xlDown)).Select
> ActiveSheet.Paste
> Range("H2").Select
> Application.CutCopyMode = False
> ActiveCell.FormulaR1C1 = "=+IF(ISERROR(RC[-1]),""No Existe"",RC[-1])"
> Range("H2").Select
> Selection.Copy
>



Preguntas similare

Leer las respuestas

#6 Marvin
23/11/2005 - 16:56 | Informe spam
GRACIAS POR TU RESPUESTA...

ME PARECE MEJOR OPCION LA DE UTILIZAR LAS MACROS YA QUE EL RECURRIR A
TERCEROS SERIA MÁS COMPLICADO Y DEPENDIENTE

TENDRAS UN POCO MAS EXPLICITO DE COMO PUDIERA QUEDAR EL PROCEDIMIENTO

TE AGRADEZCO TU TIEMPO Y ATENCIÓN

"Héctor Miguel" escribió:

hola, Marvin !

tratando de hacer un 'resumen' de las exposiciones [hasta ahora]... asumo que se trata de...
1) una serie de 'grupos' de datos, repartidos en varias hojas en un libro 'X'
-> los datos [aunque estan 'ordenados'] NO tienen un 'patron de secuencia' entre final de un grupo y principio del siguiente
segun comentas, pudieran ser +/- como lo siguiente:
[A2] 5555001000 [B2] 5555001999
[A3] 5555002000 [B3] 5555002999
[A4] 5555004500 [B4] 5555004999
[A5] 5555005000 [B5] 5555005199
[A6] 5555005200 [B6] 5555005999etc. etc. etc.
-> es decir, un grupo NO esta 'separado' del siguiente p.e. por cada 1000, 500, 50, o n_incrementos
por lo cual, 'intuyo' que podria darse el mismo caso para las 'terminaciones' de cada grupo -?-
2) en otro libro, necesitas 'detectar' si x_dato de cada fila, existen de manera 'segura' en los datos del libro 'fuente'
es decir... si buscas el numero 5555006745 y el -posible- grupo al que pudiera 'pertenecer' solo considera [p.e.]...
[A8] 5555006000 [B8] 5555006650 [el grupo 'existe' PERO el numero mayor del grupo es inferior al buscado]

[A9] 5555008000 [B9] 5555008230 [obviamente que no existe de manera 'exacta']
3) es necesario 'prevenir' [o considerar] un aumento en el numero de hojas de la 'base de datos' [en el libro 'fuente']
-> ademas de 'poder buscar' en todas las posibles hojas que llegue a tener dicho libro... voy bien ???

si no faltan detalles de 'significativa' importancia :)) te paso en seguida [lo que creo son] las posibilidades 'inmediatas'
saludos,
hector.

op1: desarrollar una macro que se encargue de 'depositar' SOLO cada valor 'correspondiente' [si el dato existe en la fuente]
op2: usando formulas con funciones 'normales' [si el libro 'fuente' esta abierto en la sesion, o si pudiera estar 'cerrado']...
op3: usando un complemento de terceros con bastantes funciones utiles que se pueden 'adicionar' a las 'normales' de excel

considerando que el dato debe existir 'exactamente' [entre el inicio y el final de un grupo y en alguna de las hojas del libro fuente]
1) 'dejo' la opcion de macros para mas adelante [si consideras que sea una mejor opcion]
2) si es 'imprescindible' que el libro fuente este cerrado [la opcion 3]...
una [posible] alternativa seria usando un complemento de terceros +/- como sigue:
busca en la pagina de Laurent Longre -> http://xcell05.free.fr/ =>English page<= [Excel add-ins]
[e instala] el complemento MoreFunc.xll [MasFunciones] -> http://xcell05.free.fr/downloads/Morefunc.zip
[opcionalmente, algunos ejemplos en -> http://xcell05.free.fr/downloads/Examples.zip]
podras usar la funcion: Indirect.Ext que permite 'interactuar' con libros cerrados.
-mas otras 40 funciones que 'tendrias que cargar' con ellas- =>todas muy utiles<= 'pero'... NO de 'uso frecuente'
-> otra posible alternativa seria usar macros para 'crear' [efectivamente] formulas vinculando a libros cerrados
3) para la opcion 2... estos son 'mis supuestos' [adapta/modifica/corrige/... donde sea necesario]
[toma nota que se requiere 'dejar' como preparacion una columna por cada hoja donde se requiera buscar en el libro fuente]
-> en la hoja donde tienes los datos que se van a buscar en el libro fuente...
[A2:A_n] los datos [numeros de telefono]
[C1] -> escribes el nombre del libro entre corchetes p.e. -> [libro fuente.xls]
[D1] -> escribes el nombre de la hoja1 [dentro del libro fuente] p.e. -> hoja1 [y contunuas por cada hoja en la fila 1]
[D2] -> una formula: => toma nota que debe ser en una sola linea y mi separador de argumentos es la coma :D
=si(eserror(buscar($a2,indirecto($c$1&d$1&"!a:a"))),"",elegir(1+(indice(indirecto($c$1&d$1&"!b:b"),
coincidir(buscarv($a2,indirecto($c$1&d$1&"!a:a"),1),indirecto($c$1&d$1&"!a:a")))>=$a2),"",d$1))
esta formula la copias en la fila 2 por cada columna que necesites segun hojas tengas para buscar en libro fuente <= OJO

[C2] -> usa la siguiente formula: =$c$1&indice(d$1:f$1,coincidir("*?*",d2:f2,0))
esta formula 'deja' el nombre de la hoja donde existe 'exactamente' el numero que se busca... o nada... o un error [no importa]

[B2] -> usa la siguiente formula:
=elegir(1+eserror(c2),indice(indirecto(c2&"!c:c"),coincidir(buscarv($a2,indirecto(c2&"!a:a"),1),indirecto(c2&"!a:a"))),"no existe")
o la siguiente: =elegir(1+eserror(c2),buscarv($a2,indirecto(c2&"!a:c"),3),"no existe")
esta formula [cualquiera de las dos] toma el valor de error... o la hoja donde existe el dato buacado
-> si hay error... devuelve que [a final de cuentas] 'NO existe' el dato buscado
-> si NO hay error... usa el buscarv [o el indice + coincidir] para rescatar los datos que necesitas :))

[finalmente] copias el grupo de celdas [B2:F2] -suponiendo que estas buscando en 3 hojas -> D1, E1 y F1 <-
al grupo de filas donde necesites 'rescatar' los datos o especificar que el dato 'NO existe' ;)

-> perdon por lo extenso :-(( deja ver si lo puedo 'recortar' :)) [al menos lo que se refiere a las formulas] ;)



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida