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.
Adjunto | Tamaño |
---|---|
contar_coincidencias_filas_foro_2.xlsm | 18.41 KB |
Las macros no son más rápidas que las fórmulas de Excel.
veo que tu fórmula incorpora la función DESREF
Esta función es una de las denominadas volátiles, que quiere decir que se recalcula siempre, cada vez que cambie algo en el libro. en tu caso, no estás calculando cada fórmula 150000 veces, sino que cada vez que se recalcula una celda estás volviendo a recalcular todas las DESREF
Prueba a desactivar el cálculo automático antes de extender la fórmula y luego vuelve a activarlo.
La otra alternativa es replantear la fórmula y poner algo que resulte más eficiente.
------
Ya sé Excel, pero necesito más.