Jump to content

Macro para 150.000 a 300.000 filas


Recommended Posts

Hola buenas.

Tengo una formula para contar coincidencias columna O, las coincidencias de J:M con B:G.

J:M puede tener entre 150.000 a 300.000 filas y B:G entre 10.000 a 30.000 filas.

La formula hasta 150.000 filas en J:M la desplazo hasta el final y trada unos 30 minutos en recalcular pero la macro se queda colgada.

Mi intencion es encontrar una macro que sea mas rapida que la formula.

Esta es la macro

Sub BuscarCoincidencias()

Application.ScreenUpdating = False
Range(Range("N3"), Range("N3").End(xlDown)) = ""
For x1 = 3 To Range("B3").End(xlDown).Row
   For x2 = 3 To Range("J3").End(xlDown).Row
      c = 0
      For y = 10 To 12
         Set n = Range("B" & x1 & ":G" & x1).Find(Cells(x2, y), , , xlWhole)
         If Not n Is Nothing Then c = c + 1
      Next
      If c = 3 Then Range("N" & x2) = Range("N" & x2) + 1
   Next
Next
End Sub

 

Y esta es la formula

=SUMA(N(MMULT(N(CONTAR.SI(DESREF(B$3:G$3;FILA(B$3:B$10000)-FILA(B$3););J5:M5)>0);{1;1;1;1})=4))

Bueno en el libro se pueden ver

 

Un Saludo.

 

 

 

 

CONTAR COINCIDENCIAS FILAS FORO 2.xlsm

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 30.00 EUR
      Objetivo: 130.00 EUR
  • Files

  • Download Statistics

    • Files
      144
    • Comments
      87
    • Reviews
      25

  • Crear macros Excel

  • Posts

    • Mil gracias, Sergio Esto es otra cosa....jejeje Bueno, María, pues a ver si lo puedes probar y me dices.   Proyectos Estándares.zip
    • Debes tener una hoja con el nombre Resultado, si la quieres cambiar, modifica la línea resaltada en la macro. Colócate en la hoja donde tienes los datos a combinar antes de ejecutar la macro,  Sub Combinar() Application.ScreenUpdating = False '------------------------------------------------------------ With Sheets("Resultado") '<-- Nombre de la hoja del resultado '------------------------------------------------------------ columnas = Cells(1, 1).End(xlToRight).Column .Cells.Clear Cells(1, 1).Resize(1, columnas).Copy .Cells(1, 1) Cells(1, 1).Resize(1, columnas).Copy .Cells(1, columnas + 1) fila = 1 For Z = 2 To Range("A" & Rows.Count).End(xlUp).Row For x = Z + 1 To Range("A" & Rows.Count).End(xlUp).Row fila = fila + 1 Range("A" & Z).Resize(1, columnas).Copy .Cells(fila, 1) Range("A" & x).Resize(1, columnas).Copy .Cells(fila, columnas + 1) Next Next .Select End With Application.StatusBar = False End Sub  
    • @tese1969, por favor, prueba de nuevo. He hecho algunos ajustes.
    • Hola a todos de nuevo, ya he encontrado el fallo y lo he resuelto. Era un problema con los limites de manejo de datos  en el array inicial al ir pasando de un grupo a otro. Estaban mal definidos. Ahora ya funciona correctamente. Lo comento para que no dediquéis más tiempo a este tema. Ya esta resuelto y como decía en el mensaje anterior ahora el macro es 50 veces más rápido que el original. Por curiosidad lo he probado con una hoja con 5000 grupos (más de 200000 filas implicadas). Con el macro original le cuesta unas 4 horas de completar, con el nuevo unos 5 minutos. Para las simulaciones que quiero hacer es un cambio brutal. Os dejo el archivo por si alguien tiene curiosidad. Muchas gracias por vuestro tiempo y atención. PermutaDatosGrupos_D_arr_RESUELTO.zip
    • Hola Antoni, Después de varios intentos para conseguir correr la macro, no sé por qué me daba problemas, la he corrido y funciona bien. Tan solo que la primera fila del rango, donde están los títulos de los campos también se combinan, por lo que tengo que quitarlos a mano posteriormente, ¿se puede hacer una modificación de algunos de los parámetros para que no se incluya los títulos de los campos en la combinatoria del rango? y por otra parte se ¿pueden copiar el nombre de las columnas del rango como encabezado del nuevo rango?. Con un rango de 3 columnas y 4 filas se hace a mano en un plis-plas, pero con decenas de columnas y filas ya es más rollo. Por otra parte ¿es difícil que el nuevo rango se cree en otra hoja del libro en lugar de en la misma hoja? para así evitar tener que copiarlo en otra hoja para trabajar con los nuevos datos. Abajo incluyo un pantallazo de correr la macro con un rango de 3 columnas y 5 filas. Muchas gracias por todo Antoni. Lo que me has enviado me viene muy bien. Si no es difícil ni te lleva mucho tiempo realizar las modificaciones que te comento te agradecería que en un huequito que tengas libre las desarrollaras, así sería mucho más fácil para mí utilizarla. Gracias de nuevo.  
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy