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
>



 

Leer las respuestas

#1 Héctor Miguel
15/11/2005 - 08:27 | Informe spam
hola, Marvin !

me parece que KL 'anda de gira' :p asi que... me gustaria 'cambiarte las preguntas' [si no te molesta] :))

1) la formula que 'depositas' por macros en la celda 'G2' [segun tu consulta original]...
-> al final de cuentas, la formula [ya en el 'lenguaje' de la interfase con el usuario] resulta ser algo +/- como...
=si(y(f2>=buscarv(
f2,'[libro.xls]libro'!$a$3:$v$10110,1,1),f2<=buscarv(
f2,'[libro.xls]libro'!$a$3:$v$10110,2,1)),buscarv(
f2,'[libro.xls]libro'!$a$3:$v$10110,3,1),"no existe")

2) comentas que tu base de datos esta 'particionada' en dos hojas... y que no hay posibilidad de datos 'duplicados'
es decir... o el dato buscado, o se encuentra en una hoja... o se encuentra en la otra... o no se encuentra en ninguna

3) 'mis' preguntas son...
a) por que mantienes un rango de busqueda de 22 columnas [A:V] ? -> '[libro.xls]libro'!$a$3:$v$10110
si SOLO 'buscas' [o comparas el dato buscado] en las columnas 1 o 2 para 'devolver' [en su caso] la columna 3 ???
b) si el ultimo argumento de la funcion -> buscarv(...) ES 1 [y significa que los datos estan ordenados]...
por que necesitas comparar que el dato buscado [F2] sea >= en la columna 1 [A] y... <= en la columna 2 [B] es decir...
si la posibilidad de que el dato 'realmente' exista en la columna 1 [A]... por que la necesidad de la comparacion [>= o <=] ???

-> una primera 'propuesta'... [atendiendo a tu comentario referido en el punto 2]:
suponiendo que en la hoja1 [de un libro X], necesitas encontrar 'un dato'... O en la hoja2... O en la hoja3 [del mismo libro]
podrias probar con una formula +/- como la siguiente:
=elegir(1+contar.si(hoja2!a:a,f2)+2*contar.si(hoja3!a:a,f2),"no existe","buscando en hoja2","buscando en hoja3")

-> con la formula anterior... solo se necesitara 'reemplazar' los: "buscando en hoja2" o... "buscando en hoja3"
por las formulas que 'realmente' necesites [pero sigo 'perdido' en los 'por ques' de mi punto 3] :))

-> probablemente hay datos que 'me estoy perdiendo' [o no has comentado] -?- [p.e.]
es posible que el nombre del libro y las hojas a buscar donde sean 'ficticios' [solo para ejemplo] -?-
y si en la realidad fueran muy... 'laaaargos'... [seguramente] la formula 'final' sea igualmente laaarga :))
sobre todo, si necesitaras 'mantener cerrado' el libro donde se realizan las busquedas [se agrega la ruta 'completa'] :-((

comentas [si hubiera] algun detalle adicional ?
saludos,
hector.

Preguntas similares