Repetir el valor de varias celdas en función del valor de otras
Tengo una base de datos con información en la columna A, la cual quiero que se repita de acuerdo a lo que indica la columna B.
Espero me puedan ayudar.
A la vez cabe indicar que la columna A y B es referencial, dado que es un modelo de lo que busco.
3 Respuestas
Respuesta de Andy Machin
1
Respuesta de Rudy Quispe
1
Respuesta de Isaac Reyes
1
Andy, me mataste con el EVALUATE, no lo conozco, lo voy a estudiar ¡gracias!El For Each, lo pensé, tienes razón el el número de comparaciones, lo consideraré en otras respuestas.Pero con respecto al for interno, humildemente, sigo viendo más eficiente mi código. Creo que una combinación de ambos quedaría genial, a no ser que tengas otra carta bajo la manga.Un gusto leer tu respuesta. - Isaac Reyes
Hola Isaac. Evaluate es muy poderoso, no está de más echarle un vistazo. El For interno no afecta en nada pero igual se puede quitar, e incluso se puede meter parte de tu código y sustituir el For interno con esta línea y ya ahí tienes una combinación de amos ja ja:Range("E" & RepsCol).Resize(Range("B" & rCell.Row).Value, 1).Value = Cells(rCell.Row, 1).ValueUsando la propiedad resize. Yo personalmente no lo prefiero así, ya que estéticamente no me gusta tener tanto código en una sola línea, más para alguien que esta aprendiendo se le puede hacer tedioso de leer y comprender, pero funciona igual :) - Andy Machin
Sinceramente, tampoco me gusta complicar mucho las líneas de código, pero hay tantas cosas que uno va aprendiendo acá mismo, que caigo en la tentación de ocuparlo. Pero se aprecia la observación. En cuanto al For interno, yo díría que sí afecta y bastante más que el do externo. De puro curioso, eché a correr nuestras dos macros utilizando 300 datos con 5 repeticiones cada uno y sí que hay diferencias.Mirando tu macro con más detención, creo que la línea que le quita eficiencia es esta RepsCol = Range("E" & Rows.Count).End(xlUp).Row + 1 - Isaac Reyes
Isaac Reyes me había olvidado responder tu ultimo comentario. En que te basas para decir que tiene poca eficiencia? Si lo dices por un pequeño pestañeo que hace la pantalla, eso se produce por el Application.ScreenUpdating. Si se lo quitas deja de brincar la pantalla, pero no es una buena practica actualizar tantos datos en la hoja sin apagar antes el ScreenUpdating. Yo lo pongo ya por inercia, se lo agregue a mi código por la costumbre.. Salu2 - Andy Machin
No lo digo por el pestañeo, sino por una diferencia notoria en el tiempo de ejecución. Con los 300 datos y 5 repeticiones por datos el mío demora 0,02seg. aprox. y el tuyo demora varios segundos.En cuanto a ScreenUpdating, todo depende, pero sí es una buena práctica utilizarlo, aunque en este caso particular, no es mucha la influencia que tiene. ;-) - Isaac Reyes
Vaya, pues yo probé 499 números, osea hasta la fila 500 teniendo en cuenta el encabezado, luego en las repeticiones puse mínimo 3 y máximo 30 en un patrón constante (son muchas repeticiones!) en total se escribieron valores hasta la fila 8117. Y a mi no me dio diferencia en tiempo, ambos códigos se ejecutan igual de rápido en mili segundos. hmmmm - Andy Machin
Tienes razón, hay una pequeña diferencia, pero no es tan notable en mi PC. Y también tienes razón al indicar la línea, es esa misma línea la que causa el retraso.. gracias :) - Andy Machin