Contestaré hoy a una petición curiosa que me ha llegado a través del mail. Un usuario quería que en una tabla definida en un rango concreto (A2:C5) se fueran acumulando cantidades según introducía entradas de datos:
Veamos cuál es la plantilla sobre la que volcaremos nuestra programación:
La idea es que cada vez que el usuario introduzca los nuevos valores para la Leche, Pan y Tomate, podamos ejecutar nuestra macro, para que automáticamente genere la suma acumulada de esta entrada con todas las anteriores.
Para ello he construido una macro muy sencilla, que ejecutaremos tras la introducción de los nuevos datos para los distintos conceptos de cada entrada.
Abrimos el Editor de VBA (Alt+F11) e insertamos un nuevo Módulo, en el cuál incluiremos el siguiente código:
Para ejecutar de manera cómoda nuestra macro, la asignaremos a un botón.
Al ejecutar nuestra macro acumular conseguimos identificar la última entrada editada (celda A1), así como el último valor acumulado (rango C3:C5).
Tras 5 entradas de valores hemos obtenido un acumulado de Leche 50, Pan 100 y Tomate 150, quedando lista la tabla para la edición de los valores de la siguiente entrada.
| ...Quiero que en cada fila de concepto, pueda meter una cantidad y que se sume en acumulado, luego, en una 2ª entrada meter en otra cantidad y que acumule la de la 1ª entrada y la de la 2ª y as'ísucesivamentre. Y todo esto que se pueda hacer en cada fila de conceptos. Como puedes ver en el siguiente ejemplo en la fila leche en la primera entrada meto 20 y acumula 20. En la segunda entrada en la misma casilla borro 20 y meto 30 y en acumulado debe quedar 50. En la tercera entrada en el concepto leche, en la misma casilla borro 30 y meto 40, acumulándose en lqa misma fila de acumulado 90. Así con el resto de filas: pan, tomate... entrada 1 concepto cantidad acumulado leche 20 20 pan 10 10 tomate 40 40 entrada 2 concepto cantidad acumulado leche 30 50 pan 15 25 tomate 25 65 entrada 3 concepto cantidad acumulado leche 40 90 pan 25 50 tomate 5 70 |
Veamos cuál es la plantilla sobre la que volcaremos nuestra programación:
La idea es que cada vez que el usuario introduzca los nuevos valores para la Leche, Pan y Tomate, podamos ejecutar nuestra macro, para que automáticamente genere la suma acumulada de esta entrada con todas las anteriores.
Para ello he construido una macro muy sencilla, que ejecutaremos tras la introducción de los nuevos datos para los distintos conceptos de cada entrada.
Abrimos el Editor de VBA (Alt+F11) e insertamos un nuevo Módulo, en el cuál incluiremos el siguiente código:
| 'macro que calcula el acumulado de todas las entradas de datos. Sub acumular() Dim iAs Integer x = 1 For i = 3 to 5 'realiza la suma acumulada del valor anterior mas el nuevo 'para cada concepto (Leche, Pan, Tomate). Cells(i, 3).Formula = Cells(i, 3).Value + Cells(i, 2).Value 'limpia los campos para poder introducir los nuevos valores 'para cada concepto (Leche, Pan, Tomate). Cells(i, 2).ClearContents Next i 'Da formato personalizado, añadiendo el texto Entrada Range("A1").NumberFormat = """Entrada ""0" 'genera un autonumérico en la celda A1 'que nos indicará qué entrada es la última introducida. Range("A1").Value = Range("A1").Value + x End Sub |
Para ejecutar de manera cómoda nuestra macro, la asignaremos a un botón.
Al ejecutar nuestra macro acumular conseguimos identificar la última entrada editada (celda A1), así como el último valor acumulado (rango C3:C5).
Tras 5 entradas de valores hemos obtenido un acumulado de Leche 50, Pan 100 y Tomate 150, quedando lista la tabla para la edición de los valores de la siguiente entrada.








Me sirvió de mucho la solución que propones. Para una situación similar, pero con 17 columnas hice lo siguiente.
ResponderSuprimirFor c = 8 To 17
For f = 6 To 100
Hoja4.Cells(f, c) = Hoja4.Cells(f, c) + Hoja3.Cells(f, c)
Next f
Next c
Pero tengo el problema de que el contador de f (filas) no se detiene hasta que hace la iteración 100 aunque, por ejemplo, a partir de la fila 10 ya no hayan más celdas que contengan datos.
Me podrías ayudar a que la operación se detenga en el momento en que llegue a una fila en blanco o sin datos.
Saludos,
Roberto
Hola Roberto,
ResponderSuprimirentiendo que tus registros empiezan en la fila 6 pero no sabes hasta qué fila llegan (no que tengas saltos entres esas 94 filas que has marcado).
Si es así, entonces yo cambiaría el 100 por una variable definida por ti...
echa un vistazo a
http://excelforo.blogspot.com/2010/05/macro-para-convertir-en-numero-valores.html
en este post puedes ver un ejemplo de cómo definir la variable que necesitarías.
Basicamente con la variable localizamos la última fila con datos de tu hoja de trabajo.
Espero te sirva.
Un saludo