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.
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 de neicos
-1
-1
neicos, Analista de sistemas y Programador en: Basic,c,c++,visual...
¿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.
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.
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.
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.
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.
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.
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;
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;
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?
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?
- Compartir respuesta
- Anónimo
ahora mismo