Consulta entre varios libros

Hola experto espero que me puedas ayudar con esta macro, te agradezco de antemano la atención.
Tengo un Libro (Rangos.xls)con datos en las columnas A, B, C y DE necesito que desde otro libro (Consulta.xls)yo le consulte desde una celda, busque un número de 18 dígitos que sea mayor o igual a la columna C y menor o igual a la columna DE y me devuelva en una celda de Consulta.xls los datos correspondientes a la columna A, en otra celda los de la columna B y en otra la fila donde se encuentran los datos de la búsqueda.
Y si no encuentra que me saque un mensaje de no encontrado.
Tengo una macro que me lo hace (adjunta), pero en la misma hoja y lo necesito en libros independientes.
Si no me entiendes, me podrías dar tu e-mail y te envío en una hoja de Excel donde se comprende mejor.
Mi e-mail es [email protected]
Sub ensayo()
Range("C2").Select
f = 2
c = 3
Do
If(Cells(1, 6))>=(Cells(f, 3))Then
If(Cells(1, 6))<=(Cells(f, 4))Then
Range("F2").Value = Cells(f, 1)
Range("F3").Value = Cells(f, 2)
Range("F4").Value = f
Exit Do
End If
End If
f = f + 1
Loop Until (Cells(f, 3) = "")
End Sub
Respuesta
1
Si dices que eso ya te funciona, te añado algunas líneas que te serán de utilidad para cambiar de libro en el momento que lo necesites:
Para abrir un archivo:
Workbooks.Open "ruta_completa_mas_nombre_archivo"
Para "activar" un libro, o sea, que reciba el enfoque:
Workbooks("nombre_archivo").Activate
Para cerrar el libro activo:
ActiveWorkbook. Close

2 respuestas más de otros expertos

Respuesta
1
Seria la misma macro, unicamente deberías especificar el libro donde coge los datos. En este caso la macro te quedaría como sigue
Sub ensayo()
Range("C2").Select
f = 2
c = 3
Do
If Workbooks("Consulta.xls").ActiveSheet.Cells(1, 6) >= Workbooks("Rangos").ActiveSheet.Cells(f, 3) Then
If Workbooks("Consulta.xls").ActiveSheet.Cells(1, 6) <= Workbooks("Rangos").ActiveSheet.Cells(f, 4) Then
Workbooks("Consulta").ActiveSheet.Range("F2").Value = Workbooks("Rangos").ActiveSheet.Cells(f, 1)
Workbooks("Consulta").ActiveSheet.Range("F3").Value = Workbooks("Rangos").ActiveSheet.Cells(f, 2)
Workbooks("Consulta").ActiveSheet.Range("F4").Value = f
Exit Do
End If
End If
f = f + 1
Loop Until (Workbooks("Rangos").ActiveSheet.Cells(f, 3) = "")
End Sub
Es idéntica que la tuya lo único añadido es al principio de la referencia de una celda añadir de que libro es la celda, workbooks("Nombre del libro"). Activesheet...
Eso si, debes tener los dos libros abiertos cuando ejecutes la macro.
Muy bien ahora necesito una macro para generar otra estrella y así poderte otorgar 6 estrellas y llamar la categoría Mega excelente, gracias y te seguiré molestando
Respuesta
1
La macro que me pides debe ir pegada en Consulta.xls y la debes ejecutar desde la celda donde esté el valor a buscar, es:
Sub Buscar()
BUSQUEDA = ActiveCell.Value
Windows("Rangos.xls").Activate
Range("C2").Select
Selection.End(xlDown).Select
While ActiveCell.Row > 1
If Not ActiveCell.Value < BUSQUEDA Then
If Not ActiveCell.Offset(0, 1).Value > BUSQUEDA Then
LODEA = ActiveCell.Offset(0, -2).Value
LODEB = ActiveCell.Offset(0, -1).Value
RENGLON = ActiveCell.Row
Windows("Consulta.xls").Activate
' ESTA INSTRUCCIÓN LE DICE QUE TE PEGUE LO DE "A" EN LA COLUMNA DE LA IZQUIERDA
ActiveCell.Offset(0, -1).Value = LODEA
' ESTA PEGA LO DE "B" EN LA CELDA DE LA DERECHA
ActiveCell.Offset(0, 1).Value = LODEB
'ESTA PEGA EL NÚMERO DE RENGLON DE "RANGOS" EN LA CELDA DE ABAJO
ActiveCell.Offset(1, 0).Value = RENGLON
End
End If
End If
ActiveCell.Offset(-1, 0).Select
Wend
End Sub
Gracias Gualo por tu interés, con esto ya tienes ganado mi reconocimiento...
Mi duda es que no sé, como ejecutar la macro desde una celda, los datos a buscar están en F1, disculpa mi ignorancia...
Nota te envío otra macro que me envío otro experto, me gustaría que la vieras, me funciona bien, le añadí que el libro Rangos.xls se abriera, pero no se viera, pero tengo un inconveniente, cada que repito la consulta me dice que el libro Rangos.xls, está abierto y cuando va a cerra me pide que lo salve, ¿cómo puedo sortear esos inconvenientes para que el usuario final no los note?
Sub ensayo()
Application.ScreenUpdating = False
Workbooks.Open "C:\Documents and Settings\lsanchez\Mis documentos\Ciclos y Correrías\Consultas\Rangos.xls", ReadOnly:=True
Windows("Rangos.xls").Visible = False
Range("C2").Select
f = 2
c = 3
Do
If Workbooks("Consulta.xls").ActiveSheet.Cells(1, 6) >= Workbooks("Rangos.xls").ActiveSheet.Cells(f, 3) Then
If Workbooks("Consulta.xls").ActiveSheet.Cells(1, 6) <= Workbooks("Rangos.xls").ActiveSheet.Cells(f, 4) Then
Workbooks("Consulta.xls").ActiveSheet.Range("F2").Value = Workbooks("Rangos.xls").ActiveSheet.Cells(f, 1)
Workbooks("Consulta.xls").ActiveSheet.Range("F3").Value = Workbooks("Rangos.xls").ActiveSheet.Cells(f, 2)
Workbooks("Consulta.xls").ActiveSheet.Range("F4").Value = f
Exit Do
End If
End If
f = f + 1
Loop Until (Workbooks("Rangos.xls").ActiveSheet.Cells(f, 3) = "")
Windows("Rangos.xls").Activate
Workbooks("Consulta.xls").Activate
Range("A1").Select
Application.ScreenUpdating = True
End Sub
Además si me pudieras decir donde le inserto el msgbox para que me indique que no encontró el registro, te lo agradecería...
Si no me entiendes te puedo enviar el archivo por e-mail.
Tengo dos correos [email protected] y el otro es [email protected]
Gracias
La macro es correcta, pero si le dices que abra el libro lo va a querer abrir cada vez, es mejor que sólo lo manejes (ya abiertos los 2) que haga los cambios (aunque no se vea)
Para correr la macro, puedes usar el menu>Herramientas>Macro>Macros y la escoges de la lista que te despliega (ensayo). Hay otras maneras, pero es lo más simple. Recuerda que la debes ejecutar desde el archivo que tiene el dato en F1 a buscar.
Le puedes poner al final:
If f=2 then
msgbox "No se hallaron registros", 0, "Aviso"
Y si gustas, puedes enviarlo a [email protected]
Gualo, la macro yo la activo desde un botón, yo pensé que te referías a activar la macro desde la celda, luego de introducirle la información.
No se porque no me funciona el msgbox.
Te enviaré los dos archivos para que tengas una idea más global de que es lo que quiero y de pronto te sirva para futuras consultas.
Gracias por tu atención, eres excelente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas