Visual Basic para Aplicaciones - Comparar columnas y después ordena datos

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 44
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por javier (25 intervenciones) el 17/08/2016 20:18:53
buenos dias

Les envio cordiales saludos esperando se encuentren bien ..

presento ante ustedes una solicitud esperando alguien me pueda ayudar ..

necesito comparar dos columnas A -B

cuando encuentre que sean iguales entonces baje la información de b,c,d,e.

a lado del dato que es igual espero me sepa explicar ...



se debe considerar q tengo 800 000 reigistros por comparar....
envio un archivo de como es antes de la macro y despues de como quedaria cuando se ejecute ka macro
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por Antoni Masana (498 intervenciones) el 18/08/2016 11:19:16
Esta es la macro:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Option Explicit
 
Sub Macro_Biotico()
 
    Dim Codigo_A As String, Total_Lineas As Long, Fila As Long, _
        Codigo_B As String, Fin As Byte
 
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
 
    Total_Lineas = Range("A1").End(xlDown).Row
 
    Fila = 2
    Fin = 0
 
    While Fin = 0
        Codigo_A = Cells(Fila, 1)
        Codigo_B = Cells(Fila, 2)
 
        If Codigo_A = Codigo_B Then
           Range("C" & Fila & ":E" & Fila).Copy Range("I" & Fila)
        End If
        Fila = Fila + 1
 
        If Fila > Total_Lineas Then Fin = 1
    Wend
 
End Sub

Y adjunto el fichero excel con la macro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 44
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por javier (25 intervenciones) el 18/08/2016 16:55:45
hola de antemano te agradezco q de todos los q han visto mi solicitud tu eres el unico q tuviste el deseo de auudar mil gracias ..

me parece q no me se explicar bien por q la macro q me emvias no da el resultado que necesito..

mira envio dos archivos uno como es q tengo mi archivo

y el segundo es como deberia de quedar cuando se ejecute la macro...

cuando la columna B encuentre un dato igual a la columna A se "bajen" las filas hcia abajo (asi como el archivo )
asi para los 800 000 registros que tengo...

muchas gracias espero pueda explicarme bien...
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por Antoni Masana (498 intervenciones) el 19/08/2016 08:00:58
Estoy intentando entender la tabla que generas pero hay cosas que no me cuadran.

Según entiendo hasta cierto punto el procedimiento es el siguiente:

Voy a llamar:
a la celda de la columna A Celda_A - Valor inicial 2
a la celda de la columna B Celda_B] - Valor inicial 2
a la linea de destino Linea -Linea - Valor inicial 1 o 2 si pones cabecera.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Proceso has ultima linea
   Si Celda_A = Celda_B entonces
      Copia de la columna A a la F en el linea en columna A
      sumo 1 a linea
      sumo 1 a Celda_A
      sumo 1 a Celda_B
   else
      if Celda_A < Celda_B entonces
         copio Celda_A en la linea en columna A
         sumo 1 a linea
         sumo 1 a Celda_A
      else
         copio Celda_B a la F en la linea pero en columna B
         sumo 1 a linea
         sumo 1 a Celda_B
      fin Si
   fin Si
Fin Hasta

Esto seria mas o menos el procedimiento, falta convertirlo a codigo VB.

Pero, por que hay una línea que no entiendo y es la 201 de Jueves-18_Despues

1
P2044965556	P2044965556	VEGA, SUZANNE (CA)	4Q15	28515	200

¿De donde sale el codigo de la primera columna? En el Jueves-18_Antes solo esta en la segunda.

Esto me rompe los esquemas.

Ya me contaras.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 44
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por javier (25 intervenciones) el 19/08/2016 16:32:48
Si disculpa esta fial no deberia de existri en el archivo despues ya que pegue el dato en ultimo monento ...

Disculpa pero no se en que esta echo tu codigo para poder convertirlo a VB
Mucahs Gracias espero tu ayuda de verdad Gracias..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Comparar columnas y después ordena datos

Publicado por Antoni Masana (1 intervención) el 19/08/2016 22:26:47
Es un seudo código, si he entendido bien lo que deseas el lunes te envío el código.

Una pregunta:

¿El resultado en Hoja Nueva?

Hay un millón y pico de lineas si se llena ¿Que hago? ¿Sigo en una nueva hoja?

Parto de la suposición de que las columnas A y B están ordenadas y si no lo están es necesario ordenar la columna A y despúes las Columnas de la B a la F por el valor de la columna B.

El lunes más

Saludos
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 44
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por javier (25 intervenciones) el 19/08/2016 22:42:43
Hola
Oye mychas Gracis en verdad por atender mi solicitud..

respondiendo..
¿El resultado en Hoja Nueva? No debe ser en la misma hoja....
Hay un millón y pico de lineas si se llena ¿Que hago? ¿Sigo en una nueva hoja? Nose puede llenar debido a que en mi archivo original los registros de la columna A solo son 800 000 y de la columna B solo son 50 000 registros.. Dudo que se pase de ese registro...
De lo contrario SI se puede "usar" otra hoja nueva,,,,,,

No se deben ordenar los registros Esto debido a que en mi archivo original... falta agreagar 5 columnas mas las cuales ese es el oren que se deben de llevar...

Mil gracias ,,,
Saludos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por Antoni Masana (498 intervenciones) el 22/08/2016 08:52:20
Hola Javier,

Por favor aclárame unas dudas:

Para empezar he de suponer que las columnas A y B no están ordenadas.
Para que la el proceso sea rápido y el resultado ordenado debo ordenar las dos columnas, la A por un lado y la B a la E por otro.
Esto se puede hacer con una copia de la hoja1 para no modificar la original.
Como las columnas de la A a la E tienen datos empezare a escribir en la G hasta la K.
Pero si tienes que ingresar 5 columnas donde las pondrás, ¿a partir de la F?, entonces debería escribir a partir de la columna L.
Estas nuevas columnas se ven involucradas en el proceso de la macro.
Es decir cuando cuando copia la fila B:E debe incluir las otras 5 columnas o estas son para el original.
Cuandos las copiadas antes o despúes de ejecutar la macro
Por las cantidades que das solo se pueden llenar como máximo hasta 850 000 líneas, entran en una sola hoja.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por Antoni Masana (498 intervenciones) el 22/08/2016 13:03:21
Asumiendo unas cuantas cosas del correo anterior te envío dos EXCEL

el viernes-19 - antes (antes de ejecutar la macro)
el viernes-19 - despues (después de ejecutar la macro)

Los dos tienen la misma MACRO.

Ya me contaras si esta bien o quieres hacer algún cambio.

La MACRO está comentada paso a paso o casi para poder seguir lo que hace.
Leelo por si hay algún detalle que no se entiende o esta mal planteado.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 44
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por javier (25 intervenciones) el 22/08/2016 18:34:15
Hola Antony comote comentaba en el correo anterior NO se deben de ordenar los datos...
este es el orden que debe de llevar,,,

solo necesito bajarla inforamcion que corresponda a cada linea es decir cuando a y b sean iguales ...

etonces la inforamcion debe de corresponder a cada fila..
tal y como esatn los archivos Jueves antes y ve el alrchivo jueves despues como quedaria...
soo se bajan las columnas b,c,d,e

Pero vuelvoa confirmar por ningun motivo se debe mover el orden..

PD No veo ningun archivo al que haces mencion

saludos y mil gracias ,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por Antoni Masana (498 intervenciones) el 23/08/2016 07:53:41
Hola Javier,

Los archivos que afortunadamente no te envie ayer estaban mal, lo he revisado esta mañana y corregido.

Para que funcione la MACRO las columnas A y B tienen que estar ordenaras de menor a mayor y por lo que veo en ejemplo que enviaste ya lo están.

Hay algo que me confunde en tu solicitud, dice "Comparar columnas y después ordena datos" cuando dices comparar columnas supongo que te refieres a:

- Si el código de la columna A no existe en la columna B copio el código de la columna A en la columna X (la que sea)
- Si el código de la columna A existe en la columna B copia el código de la columna A en la columna X, el codigo de la columna B en la columna X+1, la columna C en X+2, etc
- Si el código de la columna B existe en la columna A copia el código de la columna B en la columna X+1, la columna C en X+2, etc

Ahora bien cuando dices " y después ordena datos" ¿Que datos? ¿Que ordena?

Si la columnas resultantes ( X , X+1, X+2, etc) han de estar ordenadas por código de menor a mayor Combinando columnas A y B ya lo están y de los datos originales no muevo nada, solo hago una copia y trabajo sobre esta.

Échale un vistazo y ya me contaras.

Saludos.
\\//_

NOTA: Ahora si que hay archivo adjunto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por Antoni Masana (498 intervenciones) el 23/08/2016 09:47:36
Buenas

Le sigo dando vueltas a esto del del "compara y ordena" y que no quieres ordenar porque debe estar como esta.

Voy a numerar una serie de datos que has dado y a mirar de encajarlos:

- La columna A tiene 800 000 en un orden determinado, NO ordenado.
- La columna B tiene 50 000 en un orden indefinido, el orden no importa.
- Los códigos de la columna B siempre estarán en la columna A.

A partir de estas tres reglas seria posible consegir esto, pongo un ejemplo simple


1
2
3
4
5
6
A0001  C0001  AAA  EQ15  1234
F0001  E0001  BBB  EQ15  6781
C0001
G0001
E0001
B0001

Resultado ha de ser este

1
2
3
4
5
6
A0001
F0001
C0001  C0001  AAA  EQ15  1234
G0001
E0001  E0001  BBB  EQ15  6781
B0001

Y no este que es el que estoy dando con la MACRO actual

1
2
3
4
5
6
A0001
B0001
C0001  C0001  AAA  EQ15  1234
E0001  E0001  BBB  EQ15  6781
F0001
G0001

Si esto es se puede hacer, pero tiene truco y hay que hacer unas pequeñas modificaciones.

Cuentame si voy encaminado o me desvío del camino.

Saludos
\\//_


NOTA: Si la tercera regla no se cumple ¿Que se hace?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por Antoni Masana (498 intervenciones) el 23/08/2016 13:07:27
Buenas de nuevo.

Ya sabes lo que se dice "Cuando el diablo se aburre mata moscas con el rabo", bueno pues como no tengo mucho trabajo he realizado la segunda propuesta desordenando la columna A, o mejor dicho creando un orden con criterio propio y este es el resultado, justo lo que comentaba en l post anterior.

Ya me contaras que opinas.

Saludos
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 44
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por javier morales (25 intervenciones) el 23/08/2016 16:32:57
Hola Antoni ya revise tu macro e hice pruebas ... en verdad como me gustaría saber por lo menos la mitad de lo q tu sabes, no he encontrado ningún tutorial o curso para aprender un poco .....

por q deverdad eso es justamente lo q necesitaba....
esta perfecto....
Muchas Gracias por tu ayuda ....
Pasa excelente dia calificación Más que Diez------

saludos y otra vez Muchas Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por Antoni Masana (498 intervenciones) el 25/08/2016 10:45:53
Buenas Javier,

Si sabes programar en Visual Basic ya sabes la mitad de la programar en Macros de Excel, la otra mitad o mejor un 45% se aprende grabando Macros, es decir ¿Como se hace tal cosa? Pones a grabar Macro y haces tal cosa. y veras el codigo de lo que hace, el resto buscando en Google.

Pon estas 4 palabras en el buscador y ya encontradas información "tutorial macro excel 2010"

Te adjunto Tutorial pero hay más, que de haberlos haylos.

Segunda cuestión:

Cual de las dos Macros era la que necesitabas, la del Viernes_19 o la del Sabado_20.

¿Cuanto tarde en ejecutarse?

Si le pones un DoEvents dentro del While se ejecutara en segundo plano y no bloquea el ordenador, pero en contrapartida tarda algo más.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 44
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Comparar columnas y después ordena datos

Publicado por javier morales (25 intervenciones) el 25/08/2016 16:44:20
Hola Antoni

De antemano agradezco tu atencion...
la del sabado es la que me sirvio....
muchas gracias en verdad el proceso tarda 2 minutos es una maravilla ...
y gracias por el tutorial lo estudiare a detalle ...

mucahs gracias ...
saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar