¿Sustituir macro con grabadora de contar coincidencias?
Tengo una macro hecha con grabadora ( es lo más que se hacer en el tema de macros)
En columna POR cuenta por filas las coincidencias de los números, la fórmula se puede ver en X2 el resto los resultados ejecutando el botón GRABAR X.
Hasta aquí todo bien 4.866 filas, ahora cuando el tema se va de 100.000 a 800.000 filas puf….. Se hace eterno…. O simplemente con 20.000 filas.
El asunto es una macro lo más rápida posible para filas de 100.000 a 800.000
https://www.dropbox.com/s/6u9u4hhiukf4uig/CONTAR%20COINCIDENCIAS%20FORO.xlsb?dl=0
1 Respuesta
[Hola
Estimado, como siempre te digo: Si vas a usar macros, lee sobre VBA. Aunque suene duro decirlo: Usar la grabadora es no saber nada de macros.
Sobre tu dilema, esto es 15 veces más rápido:
Application.ScreenUpdating = False TimeStart = Timer Range("X2").AutoFill Destination:=Range("X2:X4866"), Type:=xlFillDefault Range("X2:X4866").Value = Range("X2:X4866").Value MsgBox CDbl(Timer - TimeStart) Application.ScreenUpdating = True
Saludos]
Abraham Valencia
Hola buenas.
Exacto no se nada de macros, por eso pregunto y como digo (lo mas que se es con grabadora) se lo que necesito para lo que tengo un monton de filas y es una macro lo mas rapida posible.
Le coloque la macro pues el pc en suspension a las 4 horas, ahora veo que esta aplicacion
TimeStart = Timer MsgBox "Fin de la Macro" & vbCrLf & _ "Tiempo de ejecucion " & Timer - Ini & " seg."
me dice 52.250,48 segundos ??? para 50.000 filas en cada grupo ???? esto no puede ser el pc entro en suspension a las 4 horas.
Se que hay macros sencillas y complejas. para las filas que tengo y la rapidez de la macro se trata de una macro compleja.
Salud2...
Entiendo que no sepas nada de macros, pero si uno las tiene que usar pues se lee sobre ellas, no solo se usa la grabadora y no solo se pregunta. Ojo, no hay problema en preguntar, pero si es bueno acompañar eso de lectura.
No me queda claro eso de que se demoró 52 segundos pero dices que entró en suspensión cuando eso ocurre a las cuatro horas. Aún con un millón de filas sería imposible que la macro que te propongo demore cuatro horas.
Abraham Valencia
52 segundos NO, me dice 52.250,48 segundos 52 mil... 258,48 según aplicación de la macro.
Bueno dejando esto que no me cuadra para nada...
La ejecuto la macro solo para 50.000 filas de nuevo, Pc en suspensión 2 horas regreso sobre las 3 horas (lógico el Pc entro en suspensión a las 2 horas) la macro no acabo sigue su proceso.
Lo que quiere decir que tarda más de 2 horas 50 mil filas.
Un Saludo...
Para 50000 fila en mi laptop se demora 2.4 segundos: Office 2019 de 64 bits, 6 GB Ram, Proceador Core I5 de 3 Ghz, Windows 10 pro 64 bits
¿No será que lo que envié lo pusiste con algo más? Muestra como lo usaste tal cuál ¿o será que en realidad lo usaste sobre otro archivo?
Abraham Valencia
Bueno las maquinas cuentan la mia es inferiror, pero en este otro libro con menos filas.
En C:H +- 7.000 FIlas en L:Q 150.000 Filas Resultados en R.
Hoja 1 y Hoja 2 resultados tiempos en V.
Macro con grabadora y la tuya, no hay diferencia en tiempos practicamente
https://www.dropbox.com/s/q4fyjnpxtmsdjss/MACRO%20TODO%20EXPERTOS.xlsb?dl=0
Esto lo tenia ya mas que visto pero por probar.........
Sigo a la busqueda de una macro mas rapida.
Mi pequeña observacion, es que con grabadora o sin ella trabaja con la formula que la arrastra hasta el final fe la fila X sea 150.000/ 80.000 o 300.000 entonces excel se pòne a recalcular la formula fila a fila...... esto es igual a tiempo cuanto mas filas mas recalculo de excel con la formula.Yo lo veo en la hoja abajo parte derecha, 2 procesadores 1%,2% ect... hasta completar el 100% del recalculo de la formula.
Solucion.... una macro que haga lo de la fórmula, de contar coincidencias por filas, pero que sustituya el recalculo de Excel con la formula.
Si manualmente arrastras las formula hacia abajo, no es lo mismo que la arrastres 10,20 filas a que la arrastres 20.000, 80.000 o 100.000 filas, la formula cuando llega al final si son 100.000 filas tiene………… que recalcular……………… todas las filas………………… hay esta la demora del tiempo, es lo que yo pienso como sustituir este proceso ¿??
Un Saludo.
Te cuento que en mi Office 2019 de 32 bits ocurre como si siguiera pensando, pero si lo corto con ESC a los 20 segundo, igual los resultados están ahí bien, je je je raro pero real. Recuerdo que Microsoft recomienda usar el Excel de 64 bits para muchos datos, pero me parece una exageración que para 150 mil ocurra eso. Dame un rato y veré una solución pues es un tema que sí me interesa. Ah, ojo, inlcuso con una fórmula medio compleja como la tuya no debería quedarse "pensando". Prueba a poner ESC a los 30 segundos y verás.
Abraham Valencia
A mi se queda como dices pensando y arriba excel no responde, pero no lo hago caso y al final acaba su tarea eso si a los 46 minutos 150.000 filas en un grupo en el otro grupo 7.000 filas
Claro, ya te dije, para que no haya tanto problema el Excel de 64 bits es mejor, pero dado que no es tu caso y la fórmula es relativamente compleja y las miles de ellas demoran mucho tiempo en calcular, hay que buscar alternativas que pasan, en realidad, por saber qué es lo que consideras obtienes con esa fórmula, ya que tal como la has planteado, pues deja muchas dudas.
Resumen: Qué resultado esperas de esa fórmula, por qué, cómo, etc.
Abraham Valencia
Yo tengo win 7 64 bits AMD 4gb de Ram.
Bueno en cuanto ala fórmula, pincha en la fórmula hoja 1 R1
Veras lo que selecciona la fromula .
Compara toda la fila 1 L:Q con C:H y cuenta las coincidencias de los números por fila... que son =4
Para que los datos sean exactos veras en la fórmula >=4.
Y esto esto corriendo la fórmula en R hacia abajo pues lo dicho antes fila a fila.
Esto lo uso para >=3 >=4 >=5.
Creo ques super facil de entender.
En el inicio del hilo
Cuenta por filas las coincidencias de los números
Un Saludo...
Pues no, no es fácil de entender, y si te das cuenta, y no tomes a mal mi comentario, en los foros en los que consultas siempre es complicado entenderte porque explicas tal cual lo ves tú, no poniéndote en le lugar de los que estamos de este lado de la pantalla.
Por cierto, si coges algunos datos de todos los que tienes, para nada esa fórmula da el número de coincidencias entre filas de un grupo y otro. No al menos tal cual lo explicas.
Ah, para terminar, NO hablo del Windows y sus bits, es casi obvio que tu Office es de 32 bits, insisto, no confundir con los bits del ]Windows.
Abraham Valencia
Es Office 2010 64 bits.
Bueno si de esta no lo entiendes algo falla y no soy yo.
Lo que si se que no es un ejerccio facil.
C: H en Rojo 2 veces
20
24
28
45
C: H En Colores 2 veces.
3
4
5
6
Esto está claro ¿???
Ahora en L: Q
Lo mismo de arriba pero una sola vez.
En R resultado de la macro que arrastra la formula desde R1.
En S resultado de la macro que arrastra la formula desde S1, aquí toda visible en la columna esta columna S forma solo parte para la explicación del tema, en libro real no existe.
Resultado R1 y R9 =2
Lo del resultado de R =2 pues son las 2 veces de contar coincidencias por fila de la fórmula que están en C: H
https://www.dropbox.com/s/4wtv5o15ehh0fe1/MACRO%20TODO%20EXPERTOS%20%202.xlsb?dl=0
Un Saludo.
Ajá, con ese ejemplo te entendí, y OJO, no coincidían en mis pruebas porque en tu primer archivo tenes ¡Filas vacías! Y aparentemente (al filtrar para probar) solo eran 1821 y no las 7005 que hay, por cierto ¿por qué ese corte entre grupos?
Ah, detalles de tu Office, a pesar de ser de 64 bits, al solo tener 4 RAM, no trabaja con su máximo de posibilidades. Es casi como tener Office de 32 bits.
Sobre tu dilema ¿has visto qué ocurre con la herramienta "Evaluar fórmula"? Solo en el Desref cada fórmula hace ¡10000 iteraciones!, multiplica eso por los 150000 registros y súmale las demás acciones de las otras funciones de la fórmula... estamos hablando de ¡Más de Mil Quinientos MILLONES! De operaciones ¿entiendes el por qué de la demora en tu PC? (O en casi cualquier otra)
Entonces, debo repetirte algo que ya te han dicho, y espero que de verdad no lo tomes a mal o te molestes: Excel NO es el programa que necesitas. Necesitas programar en VB.Net, o C# o etc. y apoyarte en MySQL o SQL Server (o similar) para lo que estás haciendo.
Si insistes en usar Excel, pues ni aún usando "Evaluate" se mejorará demasiado el rendimiento, ni siquiera colocando el cálculo en manual. Otra opción es hacer todo con VBA (OJO, todo, no insertar fórmulas o usar Evaluate), sino usando For Next y otras instrucciones, pero aún así la cantidad de bucles hará que el proceso sea largo.
Por último, si no crees lo que digo, consulta en cualquier otro foro.
Lo siento.
Abraham Valencia
Dos cosas
1º
Ram 4 Gb y Ram virtual 16 Gb .
2º
Ahora a estas alturas del hilo jiii.... me dices
Otra opción es hacer todo con VBA (OJO, todo, no insertar fórmulas o usar Evaluate),
Que tampoco se entendio en titulo del Post ??
Sustituir macro con grabadora de contar coincidencias?
No se entiende la palabra Sustituir ???? es cualquier otra macro que funcione mejor.
Bueno lo unico claro que veo de tu respuesta, es haz otra macro mejor que la de la grabadora jaja....
O sea un bucle de preguntas respuestas sin fin, cuando al final comprendistes de que iva el Tema jaja..... que costo.... jaja...
Bueno un ejercicio y reto dificil este mio.
Salud2.......
A ver estimado, creo que el que NO entiende conceptos eres tú.
Veamos, la grabadora de macros para casos como el tuyo solo inserta fórmulas usando VBA, que como bien comentabas es un proceso lento. Yo, con el ánimo de ayudarte intenté convertir en valor dichas fórmulas para evitar tanto cálculo dado que la fórmula que usas, tal como comenté, se veía medio compleja (no la analicé pues no era de mi interés). Intenté también con Evaluate (que parece no conoces) y la verdad el tiempo sigue siendo largo. Una vez hecho eso miré la fórmula y vi que, aparentemente no coincidían los cálculos y fue ahí que te pregunté lo de las coincidencias que con tu nuevo archivo fue fácil de entender, más aún viendo lo de las filas que eran más de las que aprecian (del grupo de las columnas de la izquierda). Hecho todo eso, y haciendo uso de MI TIEMPO, y viendo que las soluciones probadas eran realmente poco prácticas, es que te digo lo de ahora. OJO, todo eso a pesar de que yo y varios otros Y EN VARIOS FOROS te hemos dicho que Excel NO es el programa ideal para lo que estás intentando hacer.
Por cierto, estimado, repito, eres tú el que no termina de entender lo qué es Excel, sus limitaciones, y mucho menos entiendes lo que es el VBA. Siento ser duro en esta parte, pero realmente tu último mensaje es el de una persona mal agradecida e incapaz de ver sus limitaciones de conocimiento y que, peor aún, increpa a otros de no entender las cosas. O sea, a tu entender, TODOS en TODOS los foros somos los que no te entendemos, y tú el que explica bien y entiende todo ¡Qué locura!
Para ir terminando, NO existe algo que se defina como "hacer una fórmula en VBA", como es lo que pareces creer, las cosas se programan y dado tu dilema, y REPITO, ya habiéndolo analizado más a profundidad, puedo volver a decir lo que varias veces se te ha dicho: CON EXCEL NO. Bueno, sí, pero ya sabes con que tiempos. Ah, y con VBA... será casi lo mismo por los bucles que se necesita.
Ahora sí, por último, sobre lo que tú llamas "reto", la verdad, no podrás. Dicho eso, paso a bloquearte, ni te molestes en responder. Lo mismo haré en los otros foros.
Abraham Valencia
- Compartir respuesta