Comparar 2 tablas

Hola.
Tengo 2 tablas de Excel.
Las 2 tienen la misma estructura. 3 columnas en cada una (NIF, PASS1, PASS2).
El archivo original tiene unos 4000 NIF's, con sus correspondientes PASS1 y PASS2.
El archivo final, tiene unos 3000 NIF's, SIN los campos PASS1 y PASS2.
Necesito comparar de tal manera que los datos del archivo de 4000 vuelque al de 3000, el campo PASS1 y PASS2 asociado a los NIF's que coincidan entre ellos, en teoría 3000.
Todos los NIF's de 3000 están en 4000.

1 respuesta

Respuesta
-1
¿Mi pregunta es que si se pueden reemplazar los pass al pasarlos a la tabla de excel de 3000 o se queden como están si ya están?, ¿Son 2 tablas diferentes? ¿O 2 libros diferentes? Los datos que no encuentre en el de 3000 los agrega nuevos, ¿no?
Cuanta más información me de le podré ayudar mejor.
Muchas gracias por responder.
De hecho lo que necesito es eso, acutalizar los pass de la tabla de 3000 con los datos de la tabla de 4000.
Que busque las coincidencias, y las que encuentre, actualize los datos de 3000.
En la tabla de 4000 no me interesa actualizar ni tocar nada. Es sólo para coger los datos.
Yo en la tabla de 3000 tengo 3000 y quiero acabar con esos 3000, ni uno más ni uno menos. En teoría, todos esos 3000 están en 4000.
Es una actualización de una base de datos.
Están en dos archivos diferentes, pero las puedo poner en dos Sheets en el mismo archivo. Eso no es problema.
Muchísimas gracias.
En la tabla de 3000 ahora no hay volores pass, están vacías las celdas esperando a ser actualizadas con los datos de 4000.
Necesitas hacer una macro:
Resultaría más fácil si las pones en el mismo libro en otra hoja diferente, aunque si estuviera en otro libro también se podría hacer. El código es el siguiente, te explico a continuación como funciona.
Sub rellenadatos() 
 Dim nombrehoja1,nombrehoja2,nif1,nif2,pass1_1,pass1_2,pass2_1,pass2_2 As String
 nombrehoja1="hoja1"; 'Aquí poner el nombre de la hoja de los 4000 registros
 nombrehoja2="hoja2"; 'Aquí poner el nombre de la hoja de los 3000 registros
 nif1="A" 'Columna del Nif de los 4000 registros
 nif2="A" 'Columna del Nif de los 3000 registros
 pass1_1="B" 'Columna del pass1 de los 4000 registros
 pass1_2="C" 'Columna del pass2 de los 4000 registros
 pass2_1="B" 'Columna del pass1 de los 3000 registros
 pass2_2="C" 'Columna del pass2 de los 3000 registros
 Dim celda, encontrado,contador Integer
 celda = 1 'numero de fila por la que empieza a buscar
 encontrado=0
 contador=celda;
 ThisWorkbook.Worksheets(nombrehoja2).Activate
 do
  vari=ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(contador).Columns(nif2).Value
  contador=contador+1
 Loop While vari <> ""
 do
  ThisWorkbook.Worksheets(nombrehoja1).Activate
  vari=ThisWorkbook.Worksheets(nombrehoja1).Application.Cells(celda).Columns(nif1).Value
  for i=1 to contador
   ThisWorkbook.Worksheets(nombrehoja2).Activate
   if vari= ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(i).Columns(nif2).Value
    ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(i).Columns
(pass2_1).Value=ThisWorkbook.Worksheets(nombrehoja1).Application.Cells(celda).Columns(pass1_1).Value
    ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(i).Columns
(pass2_2).Value=ThisWorkbook.Worksheets(nombrehoja1).Application.Cells(celda).Columns(pass1_2).Value
    exit for
   end if
  next i
  celda=celda+1
 Loop While vari <> ""
End sub

Al principio de la función hay unas variables, que tienes que rellenar según tu situación y tu documento.
No necesitas cambiar nada más, solo las variables, donde te pide que cambies el nombre de cada hoja por la que corresponda y las columnas de cada cosa.
Espero que te sirva, para cualquier duda preguntame de nuevo.
Saludos.
-----------------------------------------
He respondido a su consulta y he invertido un tiempo en evaluar y responder su consulta, simplemente le pido que finalice y valore mi respuesta, en caso de haber solucionado su problema o vuelvame a preguntar si no está conforme.
Ante todo, MUCHÍSIMAS GRACIAS, no sabes el dolor de cabeza que me estaba dando esto.
Te diré que ahora mismo no lo puedo comprobar, tengo que dejarlo para mañana.
Pero pinta muy bien el trabajo que has hecho.
Mañana te digo algo.
Muchas gracias de nuevo.
Hola.
Espero que te funcione bien.
Saludos.
Por cierto, he visto que en el código, aparte de los comentarios, hay palabras en castellano:
Dim celda, encontrado,contador Integer
 celda = 1 'numero de fila por la que empieza a buscar
 encontrado=0
 contador=celda;
Celda, encontrado... Yo tengo el Excel en inglés, eso afectará, ¿tengo qué cambiarlo?
Gracias.
No, tranquilo, eso son comentarios que te he puesto, si van precedidos por una comilla simple, el programa obvia el texto. No hay problema de idioma tampoco.
Me da error de sintaxis en las 2 lineas siguientes:
Sub rellenadatos()
 Dim nombrehoja1, nombrehoja2, nif1, nif2, pass1_1, pass1_2, pass2_1, pass2_2 As String
 Sheet1 = "hoja1" 'Aquí poner el nombre de la hoja de los 4000 registros
 Sheet2 = "hoja2" 'Aquí poner el nombre de la hoja de los 3000 registros
 nif1 = "A" 'Columna del Nif de los 4000 registros
 nif2 = "A" 'Columna del Nif de los 3000 registros
 pass1_1 = "B" 'Columna del pass1 de los 4000 registros
 pass1_2 = "C" 'Columna del pass2 de los 4000 registros
 pass2_1 = "B" 'Columna del pass1 de los 3000 registros
 pass2_2 = "C" 'Columna del pass2 de los 3000 registros
 Dim celda, encontrado, contador Integer<span style="white-space: pre;"> </span><span style="white-space: pre;"> </span>-------> EN ESTA LINEA <-------
 celda = 1 'numero de fila por la que empieza a buscar
 encontrado = 0
 contador=celda;<span style="white-space: pre;"> -------> EN ESTA LINEA <-------</span>
Sub rellenadatos() Dim nombrehoja1, nombrehoja2, nif1, nif2, pass1_1, pass1_2, pass2_1, pass2_2 As String Sheet1 = "hoja1" 'Aquí poner el nombre de la hoja de los 4000 registros Sheet2 = "hoja2" 'Aquí poner el nombre de la hoja de los 3000 registros nif1 = "A" 'Columna del Nif de los 4000 registros nif2 = "A" 'Columna del Nif de los 3000 registros pass1_1 = "B" 'Columna del pass1 de los 4000 registros pass1_2 = "C" 'Columna del pass2 de los 4000 registros pass2_1 = "B" 'Columna del pass1 de los 3000 registros pass2_2 = "C" 'Columna del pass2 de los 3000 registros Dim celda, encontrado, contador Integer celda = 1 'numero de fila por la que empieza a buscar encontrado = 0 contador=celda;
Aclaro, 2 lineas, son estas:
Dim celda, encontrado, contador Integer
y
contador=celda;
Pero había cometido algunos fallos, el código quedaría de la siguiente forma.
Sub rellenadatos() 
 Dim nombrehoja1,nombrehoja2,nif1,nif2,pass1_1,pass1_2,pass2_1,pass2_2 As String
 nombrehoja1="hoja1" 'Aquí poner el nombre de la hoja de los 4000 registros
 nombrehoja2="hoja2" 'Aquí poner el nombre de la hoja de los 3000 registros
 nif1="A" 'Columna del Nif de los 4000 registros
 nif2="A" 'Columna del Nif de los 3000 registros
 pass1_1="B" 'Columna del pass1 de los 4000 registros
 pass1_2="C" 'Columna del pass2 de los 4000 registros
 pass2_1="B" 'Columna del pass1 de los 3000 registros
 pass2_2="C" 'Columna del pass2 de los 3000 registros
 Dim celda, encontrado,contador As Integer
 celda = 1 'numero de fila por la que empieza a buscar
 encontrado=0
 contador=celda
 ThisWorkbook.Worksheets(nombrehoja2).Activate
 do
  vari=ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(contador).Columns(nif2).Value
  contador=contador+1
 Loop While vari <> ""
 do
  ThisWorkbook.Worksheets(nombrehoja1).Activate
  vari=ThisWorkbook.Worksheets(nombrehoja1).Application.Cells(celda).Columns(nif1).Value
  for i=1 to contador
   ThisWorkbook.Worksheets(nombrehoja2).Activate
   if vari= ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(i).Columns(nif2).Value
    ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(i).Columns
(pass2_1).Value=ThisWorkbook.Worksheets(nombrehoja1).Application.Cells(celda).Columns(pass1_1).Value
    ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(i).Columns
(pass2_2).Value=ThisWorkbook.Worksheets(nombrehoja1).Application.Cells(celda).Columns(pass1_2).Value
    exit for
   end if
  next i
  celda=celda+1
 Loop While vari <> ""
End sub

¿Has verificado las variables que teinias que cambiar? Tienes que cambiar las columnas por las que correspondan y el nombre de las hojas también, ¿vale?
Hola de nuevo.
Me da error en la fila número 11, empezando por abajo:
Compile error: Syntax error
if vari= ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(i).Columns(nif2).Value
¿Qué puede ser?
Muchas gracias.
Había un fallo esa línea le falta una cosa, un THEN, se debió haber borrado por error, quedaría esa línea así:
if vari= ThisWorkbook.Worksheets(nombrehoja2).Application.Cells(i).Columns(nif2).Value then

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas