Buscar datos en diferentes hojas

Tengo 2 hojas en excel, donde cada hoja tiene en promedio 1000 registros, ademas en cada hoja hay datos de clientes, cada hoja tiene 3 campos (DNI, Nombres, Dirección). Lo que deseo es buscar a los clientes de la hoja 2 q se repiten en la hoja 1 y me muestre sus datos completos (DNI, Nombres y Dirección) en la tercer hoja.

5 Respuestas

Respuesta
1
Imagino que tienes una hoja (Hoja2) con títulos de campo tal que DNI, NOMBRES, DIRECCIÓN. Una Hoja (Hoja1) donde al menos tienes un campo (DNI) a comparar y una hoja destino (Hoja3) con nombres de campo (DNI, NOMBRES, DIRECCIÓN).
Ejecuta esta macro y me comentas resultados. La macro buscar cada valor del DNI de la hoja2 en la hoja 1 y si lo encuentra devuelve la linea de registros en la hoja3.
Un saludo
Sub REPETIDOS()
Dim CELDA As Range
On Error GoTo 10
For Each CELDA In Worksheets("HOJA2").Range("A2:A65536")
If CELDA = "" Then Exit For
If Application.WorksheetFunction.VLookup(CELDA, Worksheets("HOJA1").Range("A1:A65536"), 1, 0) Then
Worksheets("HOJA3").Range("A2").Offset(I, 0) = CELDA
Worksheets("HOJA3").Range("A2").Offset(I, 1) = CELDA.Offset(0, 1)
Worksheets("HOJA3").Range("A2").Offset(I, 2) = CELDA.Offset(0, 2)
I = I + 1
End If
10 Next CELDA
End Sub
Saludos y gracias por tu pronta respuesta.
Cuando ejecuto el código de la macro que me enviaste me sale el sigt. Mensaje de error:
Error 1004
No se puede obtener la propiedad de Vlookup de la base WorksheetFunction.
¿A qué se debe este error?
Ah pero te digo que el primer dato si lo encuentra y cuando le realice un seguimiento al programa en el la búsqueda del tercer datos es donde sale el error.
Prueba con este
Sub REPETIDOS()
Dim CELDA As Range
On Error GoTo 10
For Each CELDA In Worksheets("HOJA2").Range("A2:A65536")
If CELDA = "" Then Exit For
If Application.WorksheetFunction.CountIf(Worksheets("HOJA1").Range("A1:A65536"), CELDA) > 0 Then
Worksheets("HOJA3").Range("A2").Offset(I, 0) = CELDA
Worksheets("HOJA3").Range("A2").Offset(I, 1) = CELDA.Offset(0, 1)
Worksheets("HOJA3").Range("A2").Offset(I, 2) = CELDA.Offset(0, 2)
I = I + 1
End If
10 Next CELDA
End Sub
Respuesta
1
Creo entender tu pregunta, ¿trataré de contestarla pero si no entiendes enviame una contrarespuesta y no califiques hasta terminar ok?.
Lo que tienes que hacer es usar una fórmula que se llama BUSCARV en la hoja 3.
Esta fórmula buscaría los valores de la hoja 2 en la hoja 1 y si lo encuentra te devuelve el valor que tu le indiques en la hoja 3, si no lo encuentra devuelve un valor #N/A que posteriormente puedes limpiar.
Como se hace:
Esta fórmula funciona así:
Buscarv (valor a buscar, matriz, valor a devolver, 0).
El valor a buscar es la primera celda o registro de la hoja 2 que la fórmula buscará en la hoja 1, la matriz es todos los datos de la hoja uno, el valor a devolver es un numero que indica que celda de la hoja 1 quieres que te muestre como resultado y el cero es para que te traiga la coincidencia exacta.
Quedaría algo como esto:
=BUSCARV(Hoja2!A2,Hoja1!$A$1:$C$1000,1,0)
Este en particular te devuelve el primer campo de la hoja 1 si existe también en la hoja 2.
Si no te funciona la fórmula tienes que tener en cuenta si tu pc usa comas o punto y coma en la separación de los campos.
Cualquier duda, pregunta nuevamente y si no te funciona y te parece bien me puedes enviar el archivo por correo.
Respuesta
1
Lo que se me ocurre para que implique el mínimo de trabajo para el usuario y lo puedas verificar cada vez que necesites, sería hacer una macro, la cual te envío en la siguiente respuesta. También puedes darme una dirección de correo para que te mande un ejemplo o enviarme tu ejemplo a [email protected] poniendo en el asunto "TodoExpertos" para que le de rápido seguimiento.
Sub Macro1()
'
' Macro1 Macro
' Macro grabada el 04/10/2006 por Eduardo Marañon Del Castillo
'
'
Sheets("Hoja3").Select
Range("A1").Value = "DNI"
Range("B1").Value = "NOMBRE"
Range("C1").Value = "DIRECCION"
Range("A2").Select
Sheets("Hoja1").Select
Range("A1").Select
Selection.End(xlDown).Select
UNO = ActiveCell.Row
Sheets("Hoja2").Select
Selection.End(xlDown).Select
DOS = ActiveCell.Row
For I = 2 To UNO
Sheets("Hoja1").Select
DNI = ActiveCell.Value
Sheets("Hoja2").Select
Range("A2").Select
For J = 2 To DOS
If ActiveCell.Value = DNI Then
NOMBRE = ActiveCell.Offset(0, 1).Value
DIRECCION = ActiveCell.Offset(0, 2).Value
Sheets("Hoja3").Select
ActiveCell.Value = DNI
ActiveCell.Offset(0, 1).Value = NOMBRE
ActiveCell.Offset(0, 2).Value = DIRECCION
ActiveCell.Offset(1, 0).Select
Sheets("Hoja2").Select
End If
ActiveCell.Offset(1, 0).Select
Next J
ActiveCell.Offset(-1, 0).Select
Next I
End Sub
Respuesta
1
Puedes hacerlo con la función BUSCARV, donde el valor que buscas sea siempre el DNI, que imagino que es un numero que no tiene casi posibilidades de que este escrito erróneamente.
Te paras en la hoja 3, en la primer fila de la primer columna inserta esa función,
valor_buscado = (pasas a la hoja dos y seleccion el primer DNI que aparece)
matriz_buscar_en = (pasas a la hoja 1 y seleccionas las tres columnas que contienen los datos, DNI, nombre y direccion)
Indicardor_de_columnas = (es un numero entre 1 y el total de columnas donde estas buscando, osea 3; este numero te dara el resultado, 1 para DNI, 2 para nombres, 3 direccion, segun el orden que me escribes. En este caso, seria 1)
Luego pasas a la primer celda de la segunda columna de la hoja tres, y colocas la misma fórmula, pero en indicador_de_columnas colocas 2.
Luego pasas a la primer celda de la tercer columna de la hoja tres, y colocas la misma fórmula, pero en indicador_de_columnas colocas 3.
Luego autorellenas estas tres celdas de la hoja 3, hasta "el total de filas que contienen datos de la hoja 2".
Dudas, puedes ver acá:
http://agustinianos.udea.edu.co/~leciro/manuales/excel/consultar/buscarv.htm
Respuesta
1
Utiliza la la fórmula BUSCARV dondo lo primero que tienes que marcar es el valor que quieres buscar luego seleccionas el rango donde lo quieres buscar, luego el indicador de columna que parte desde la primera columna del rango.. osea la primera columna del rango es uno la segunda es 2 y así las demás columnas... en el ulti, o recuadro vas a poner falso...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas